AC Milan vs Atalanta: Tactical Analysis of a 3-2 Defeat
AC Milan’s 3-2 home defeat to Atalanta at Stadio Giuseppe Meazza in Serie A’s Regular Season - 36 was a match split into two distinct tactical stories. Atalanta, under Raffaele Palladino, built a 2-0 half-time lead and extended it to 3-0 by 51', punishing Milan’s early structural fragility in Massimiliano Allegri’s 3-5-2. Milan then tilted the pitch with territorial dominance, finishing with more possession, more shots, and higher xG, but their late surge only narrowed the scoreline. The contest became a test of Atalanta’s compact 3-4-2-1 block and transition threat against Milan’s belatedly aggressive, risk-heavy chase.
I. Scoring Sequence & Disciplinary Log
The game’s flow followed the events below in strict chronological order.
Goals
- 7' Ederson (Atalanta) — Normal Goal
- 29' D. Zappacosta (Atalanta), assist Nikola Krstović — Normal Goal
- 51' G. Raspadori (Atalanta), assist Ederson — Normal Goal
- 88' S. Pavlović (AC Milan), assist S. Ricci — Normal Goal
- 90' C. Nkunku (AC Milan) — Penalty
Disciplinary log
- 34' Rafael Leão (AC Milan) — Foul
- 70' Isak Hien (Atalanta) — Argument
- 89' Adrien Rabiot (AC Milan) — Argument
- 89' Pervis Estupiñán (AC Milan) — Foul
- 90' Alexis Saelemaekers (AC Milan) — Argument
- 90+5' Nikola Krstović (Atalanta) — Time wasting
- 90+6' Raoul Bellanova (Atalanta) — Foul
Card totals (locked):
AC Milan: 4, Atalanta: 3, Total: 7
Substitutions (chronological, using mandated format)
- 46' C. Nkunku (IN) came on for R. Loftus-Cheek (OUT) — AC Milan
- 48' O. Kossounou (IN) came on for G. Scalvini (OUT) — Atalanta
- 51' G. Raspadori goal (no substitution) — Atalanta
- 55' R. Bellanova (IN) came on for D. Zappacosta (OUT) — Atalanta
- 58' Z. Athekame (IN) came on for K. De Winter (OUT) — AC Milan
- 58' N. Fullkrug (IN) came on for S. Gimenez (OUT) — AC Milan
- 58' Y. Fofana (IN) came on for R. Leao (OUT) — AC Milan
- 63' H. Ahanor (IN) came on for unnamed player (OUT) — Atalanta
- 63' M. Pasalic (IN) came on for C. De Ketelaere (OUT) — Atalanta
- 80' P. Estupinan (IN) came on for D. Bartesaghi (OUT) — AC Milan
By 51', Atalanta led 3-0; Milan’s response from 88' onward reshaped the score but not the outcome. The half-time score was AC Milan 0-2 Atalanta; full-time AC Milan 2-3 Atalanta.
II. Tactical Breakdown & Personnel
Allegri’s AC Milan started in a 3-5-2 with M. Maignan behind a back three of S. Pavlović, M. Gabbia, and K. De Winter. The wing-backs A. Saelemaekers and D. Bartesaghi were asked to provide width, while a central trio of S. Ricci, R. Loftus-Cheek, and Adrien Rabiot tried to control possession and feed the front two, S. Gimenez and R. Leao. Structurally, Milan aimed for controlled progression and occupation of the half-spaces, reflected in their 57% possession and 541 passes, 478 accurate (88%).
However, Atalanta’s 3-4-2-1, with M. Carnesecchi in goal, a back three of S. Kolasinac, I. Hien, and G. Scalvini, and wing-backs D. Zappacosta and N. Zalewski, was primed for early vertical punches. The double pivot of M. De Roon and Ederson screened central lanes and sprang transitions. Ahead, C. De Ketelaere and G. Raspadori floated behind N. Krstović, exploiting Milan’s wide centre-backs when wing-backs advanced.
Ederson’s 7' opener encapsulated Atalanta’s plan: win the ball, break quickly into the space around Milan’s midfield, and attack the back line before it could reset. The second goal at 29', with D. Zappacosta scoring from a Krstović assist, again punished Milan’s wing-back zone, underlining Atalanta’s superiority in wide-to-half-space combinations. By half-time, Milan’s 0-2 deficit mirrored their structural imbalance: high territorial presence but vulnerable rest-defense.
At 46', Allegri’s first major adjustment came: C. Nkunku (IN) for R. Loftus-Cheek (OUT), shifting the attacking profile towards more direct penetration and one-v-one threat between the lines. Yet Atalanta struck again on 51' through G. Raspadori, assisted by Ederson, stretching the lead to 3-0 and reinforcing the efficacy of their transitional 3-4-2-1.
Palladino then moved to protect the lead and refresh his flanks: O. Kossounou (IN) for G. Scalvini (OUT) at 48', R. Bellanova (IN) for D. Zappacosta (OUT) at 55', and later M. Pasalic (IN) for C. De Ketelaere (OUT) plus H. Ahanor (IN) for an unnamed player at 63'. These moves shifted Atalanta into a more conservative, physically robust block, with fresh legs in wide and half-space channels to manage Milan’s growing pressure.
Milan’s triple change on 58' — Z. Athekame (IN) for K. De Winter (OUT), N. Fullkrug (IN) for S. Gimenez (OUT), and Y. Fofana (IN) for R. Leao (OUT) — was a clear tactical escalation. Athekame added dynamism from the back, Fullkrug gave a focal point for crosses and knockdowns, and Fofana injected ball-carrying power from midfield. The late swap of P. Estupinan (IN) for D. Bartesaghi (OUT) at 80' further tilted Milan’s left side towards aggressive overlapping and crossing.
Maignan, with 2 saves, had limited opportunity to alter the scoreline once exposed by early transitions. Carnesecchi, by contrast, produced 8 saves, underpinning Atalanta’s low-block resilience once they shifted from proactive pressing to protecting the box. His work, combined with Atalanta’s compact shape, was central to preserving the lead under heavy fire.
III. The Statistical Verdict
The numbers frame a match where Milan’s overall form in possession outstripped their early-game defensive index. Milan generated 20 total shots (9 on goal) to Atalanta’s 9 (5 on goal), and their xG of 1.94 against Atalanta’s 1.08 suggests that, over 90 minutes, Milan created the better volume and quality of chances. Their 541 passes, 478 accurate (88%), versus Atalanta’s 411 passes, 330 accurate (80%), confirm sustained territorial and technical control.
Defensively, however, Milan’s index was compromised in transition. Despite preventing an estimated 1.1 goals, they conceded three from relatively modest Atalanta xG, showing that the chances they allowed were high-impact and poorly defended. Atalanta’s own 1.1 goals prevented, combined with Carnesecchi’s 8 saves, speaks to an efficient, last-ditch defensive performance once the game state favoured deep defending.
Discipline also shaped the closing stages. Milan’s 4 yellow cards (Rafael Leão — Foul; Adrien Rabiot — Argument; Pervis Estupiñán — Foul; Alexis Saelemaekers — Argument) reflected frustration and aggressive chasing. Atalanta’s 3 yellows (Isak Hien — Argument; Nikola Krstović — Time wasting; Raoul Bellanova — Foul) were consistent with game management and late-game duels.
In synthesis, Atalanta’s early tactical execution and transition sharpness built a decisive lead; Milan’s superior possession structure and chance creation arrived too late to overturn the 3-0 platform, making this a contest where game state, not just raw performance metrics, dictated the final 3-2 scoreline.




