AC Milan vs Atalanta: A Five-Goal Drama at Meazza
Stadio Giuseppe Meazza under a May dusk is supposed to be a stage for control, not chaos. Yet this Serie A night in Round 36 turned into a five-goal drama: AC Milan 2–3 Atalanta, a scoreline that both fits and distorts the seasonal DNA of these sides.
Following this result, the table snapshot still tells of two strong, if contrasting, campaigns. Milan sit 4th with 67 points, their overall goal difference of 18 built on 50 goals for and 32 against across 36 matches. Atalanta, 7th on 58 points, mirror that attacking output with 50 goals of their own, but with a slightly looser back line conceding 34 for a goal difference of 16.
The clash of structures was clear from the first whistle. Milan leaned into their identity: a 3-5-2 that has been their default, deployed in 32 league matches. Atalanta arrived in their own familiar skin, a 3-4-2-1 they have used 32 times, with the usual fluidity between the lines.
At half-time, Atalanta’s 2–0 lead was a brutal twist against the grain of Milan’s usual defensive control at home, where they typically concede 1.1 goals per game. The second half’s 2–1 to Milan hinted at their resilience, but the damage had already been done.
Tactical voids – absences that shaped the script
This was a night defined as much by who was missing as by who played.
Milan entered without L. Modric (broken cheekbone), C. Pulisic (muscle injury) and F. Tomori (suspended after a red card). Each absence ripped out a different layer of their usual structure. Without Modric’s orchestration, S. Ricci was asked to be the metronome in the central lane. Without Pulisic’s vertical running and creativity, A. Saelemaekers had to stretch the right side from deeper, more wing-back than winger. Tomori’s suspension forced a reshaped back three where M. Gabbia and S. Pavlovic had to command space they would normally share with a more dominant presence.
For Atalanta, L. Bernasconi and B. Djimsiti were out, the latter a particularly important loss in a back line that values aggression and anticipation. In his absence, G. Scalvini, I. Hien and S. Kolasinac had to balance front-foot defending with restraint inside a hostile Meazza.
Discipline was always likely to be a subplot. Milan’s season-long yellow-card profile shows a pronounced late-game surge: 25.42% of their bookings arrive between 76–90', and a further 15.25% between 91–105'. Atalanta share that volatility, with 22.81% of their yellows between 61–75' and another 22.81% between 76–90'. This match followed the pattern: as Milan chased and Atalanta protected, the final quarter of an hour was thick with tactical fouls, delayed restarts and emotional defending.
Key matchups – hunter vs shield, engine room vs enforcer
Hunter vs shield
This fixture was always going to orbit around Atalanta’s attacking spearhead and Milan’s defensive structure. N. Krstovic, one of Serie A’s standout forwards this season, arrived with 10 total league goals and 5 assists. He is not just a finisher; 74 shots, 33 on target, and 20 key passes speak of a striker who constantly tests defensive lines.
He was flanked by C. De Ketelaere and G. Raspadori in the line of two behind him. De Ketelaere, with 3 goals and 5 assists and a rating of 7.26, is Atalanta’s creative fulcrum: 969 passes and 60 key passes underline his role as the conduit between midfield and the box.
Milan’s shield is usually reliable. Overall they concede 0.9 goals per game, and on their travels they are even tighter at 0.7, but at home that rises to 1.1, a vulnerability Atalanta targeted ruthlessly before the break. The back three of K. De Winter, Gabbia and Pavlovic were stretched horizontally by Atalanta’s wide midfielders D. Zappacosta and N. Zalewski, while Krstovic’s movement into the half-spaces forced them to constantly hand over marking duties.
On their travels, Atalanta average 1.4 goals per game, matching their home output. The three goals at Meazza were an extension of that away confidence: quick combinations through De Ketelaere, aggressive runs from Krstovic, and a willingness to commit numbers into the box.
On the other side, Milan’s own hunter was Rafael Leao. With 9 total league goals and 3 assists, he is their most dangerous individual threat, combining 45 shots (24 on target) with 55 dribble attempts, 25 successful. In the 3-5-2 he operated as a left-sided forward alongside S. Gimenez, pulling into the channel to isolate Atalanta’s right centre-back and wing-back. When Milan mounted their second-half surge, it was Leao’s capacity to beat a man and drive inside that dragged Atalanta’s block backwards and opened space for late runners like R. Loftus-Cheek and A. Rabiot.
Engine room – playmakers vs enforcers
The midfield battle was layered. For Milan, Ricci sat central as the pivot, flanked by Loftus-Cheek and Rabiot, with Saelemaekers and D. Bartesaghi providing width. Without Modric, the onus was on Ricci to accelerate circulation and on Loftus-Cheek to break lines with carries. Rabiot’s role was dual: screen transitions and arrive late in the box.
Atalanta’s response was the De Roon–Ederson axis. M. De Roon, the enforcer, set the pressing triggers, stepping into Milan’s midfield to disrupt build-up. Ederson’s job was more hybrid: protect central lanes but also support De Ketelaere between the lines. With Zappacosta and Zalewski high and wide, Atalanta’s shape often morphed into a 3-2-4-1 in possession, pinning Milan’s wing-backs deep and leaving Ricci outnumbered when Atalanta counter-pressed.
This imbalance was especially visible in the first half, where Atalanta repeatedly forced Milan into rushed long balls from the back three. The absence of Pulisic – who has 8 goals and 3 assists and is normally a crucial outlet, with 59 dribble attempts and 37 key passes – meant Milan lacked a natural right-sided escape valve, making Atalanta’s press more effective.
Statistical prognosis – xG narrative and defensive solidity
If we sketch the expected goals story from the season-long profiles, the 3–2 scoreline sits on a believable curve. Heading into this game, both sides averaged 1.4 total goals for per match. Atalanta’s away attack (1.4 goals per game) against Milan’s home defence (1.1 conceded) projects a narrow away xG edge; Milan’s home attack (1.3 goals per game) versus Atalanta’s away defence (1.1 conceded) suggests a tight contest in the other direction.
Defensively, Milan’s overall record of 32 goals against in 36 games is impressive, but the structural absences – especially Tomori – lowered their usual ceiling. Atalanta, with 34 goals conceded overall and 20 on their travels (1.1 per away game), are not fragile, but they are more open than their home record (0.8 conceded) suggests. The second-half fightback from Milan exploited that, as their wing-backs pushed higher and the front two attacked the channels between centre-backs.
Discipline and game state also shaped the late phases. Milan’s tendency to collect 25.42% of their yellow cards between 76–90' speaks to a team that often defends high stakes under fatigue. Atalanta’s mirrored late-booking profile (22.81% between 76–90') reflects a side that is comfortable suffering deep and breaking rhythm with fouls when necessary. In a match where Milan were chasing a deficit and Atalanta were protecting a lead, that shared volatility made the closing stages ragged and combustible rather than controlled.
In tactical hindsight, Atalanta’s early ruthlessness against a reshuffled Milan back line, combined with the creative axis of De Ketelaere and Krstovic, justified an away edge in xG and chance quality. Milan’s response – powered by Leao’s individual threat and the physicality of Loftus-Cheek and Rabiot from midfield – narrowed the margins but could not erase the structural voids left by Modric, Pulisic and Tomori.
Following this result, the narrative is clear: Milan remain a Champions League-bound side with a solid defensive base and a star forward, but their depth is still being stress-tested. Atalanta, meanwhile, reaffirm their status as one of Serie A’s most tactically coherent travellers, capable of bending the rhythm of a big night at Meazza to their own script.


