Atalanta Defeats AC Milan 3-2 in Serie A Thriller
At Stadio Giuseppe Meazza, Atalanta edged AC Milan 3-2 in a dramatic Serie A contest, a result that dents Milan’s push to cement a top-four finish while significantly boosting Atalanta’s late charge for European qualification. Milan’s late rally could not erase the damage of a passive first hour, leaving their Champions League ambitions under renewed pressure as the season enters its final stretch.
Atalanta struck first inside seven minutes. Éderson drove forward and finished a solo move with no assist, punishing Milan’s slow start. The visitors doubled their lead in the 29th minute when Davide Zappacosta arrived from the right to score, this time assisted by Nikola Krstović, who picked him out to make it 2-0 and silence the home crowd.
Frustration began to show for Milan in the 34th minute as Rafael Leão was booked, underlining the home side’s struggles to cope with Atalanta’s compact shape and direct transitions.
Massimiliano Allegri reacted at half-time, making his first change at 46 minutes: Christopher Nkunku replaced Ruben Loftus-Cheek to add more creativity and penetration between the lines. Atalanta answered with their own adjustment two minutes later, as Odilon Kossounou came on for Giorgio Scalvini in the 48th minute to refresh the back line.
The visitors then delivered what looked like a decisive blow in the 51st minute. Giacomo Raspadori finished clinically after being set up by Éderson, whose earlier goal was now complemented by an assist, stretching the lead to 3-0 and seemingly putting Atalanta out of sight.
Raffaele Palladino continued to manage his side’s energy in the 55th minute, with Raoul Bellanova replacing the goalscorer Zappacosta on the flank. Allegri responded with a triple substitution in the 58th minute to chase the game: Youssouf Fofana came on for Rafael Leão, Niclas Füllkrug replaced Santiago Giménez up front, and Zachary Athekame came in for Koni De Winter, signalling a more aggressive posture both in attack and down the flanks.
Atalanta made a further double change on 63 minutes to maintain intensity and control: Honest Ahanor replaced Kossounou, while Mario Pašalić came on for Charles De Ketelaere, adding fresh legs in midfield and attacking support.
The first disciplinary note of the second half arrived in the 70th minute when Isak Hien received a yellow card, reflecting Atalanta’s increasingly reactive defending as Milan pushed forward.
Milan’s final substitution came in the 80th minute, with Pervis Estupiñán replacing Davide Bartesaghi to inject more thrust from the left side. The change helped tilt the field, and Milan finally broke through in the 88th minute: Strahinja Pavlović rose to score, assisted by Samuele Ricci, whose delivery created the opening to reduce the deficit to 3-1.
The hosts’ late surge came with added edge. Estupiñán picked up a yellow card in the 89th minute, followed by Alexis Saelemaekers being booked in the 90th minute as Milan committed more men forward and challenges became more desperate.
Deep into stoppage time, Milan were handed a lifeline. In the 90+4th minute, Christopher Nkunku converted from the penalty spot with no assist, making it 3-2 and setting up a frantic finale. Atalanta, however, held their nerve, even as the tension produced two more cautions: Krstović was booked for unsportsmanlike conduct in the 90+5th minute, and Bellanova received a yellow card for roughing in the 90+6th minute. Despite Milan’s late pressure, Atalanta saw out the remaining seconds to secure all three points.
Fixture Statistics & Tactical Audit
- xG (Expected Goals): AC Milan 1.94 vs Atalanta 1.08
- Possession: AC Milan 57% vs Atalanta 43%
- Shots on Target: AC Milan 9 vs Atalanta 5
- Goalkeeper Saves: AC Milan 2 vs Atalanta 8
- Blocked Shots: AC Milan 3 vs Atalanta 2
On the balance of underlying numbers, Milan’s defeat owed much to their slow start and Atalanta’s ruthless early finishing (3 goals from 5 shots on target, xG 1.08), while the hosts were left to chase a deficit despite creating the higher-quality chances overall (xG 1.94, 9 shots on target). Milan’s greater possession and volume of attempts underline that they controlled large stretches of the match, but Atalanta’s compact block and Marco Carnesecchi’s eight saves (8 saves vs 9 shots on target faced) meant the visitors maximised their periods of pressure more efficiently than the hosts.
Standings Update & Seasonal Impact
AC Milan began the day on 67 points with 50 goals scored and 32 conceded, a goal difference of +18. The 3-2 defeat leaves them still on 67 points, but their goals for rise to 52 and goals against to 35, trimming their goal difference to +17. They remain in 4th place, yet this slip tightens the race for Champions League qualification, reducing their margin for error over the chasing pack in the final fixtures.
Atalanta started on 58 points with 50 goals scored and 34 conceded, a goal difference of +16. This win moves them to 61 points, with their goals for increasing to 53 and goals against to 36, keeping their goal difference at +17. They stay 7th in the table but close the gap to the European positions above them, keeping alive hopes of climbing into the Champions League or at least securing a strong European berth as the season closes.
Lineups & Personnel
AC Milan Actual XI
- GK: Mike Maignan
- DF: Koni De Winter, Matteo Gabbia, Strahinja Pavlović
- MF: Alexis Saelemaekers, Ruben Loftus-Cheek, Samuele Ricci, Adrien Rabiot, Davide Bartesaghi
- FW: Santiago Giménez, Rafael Leão
Atalanta Actual XI
- GK: Marco Carnesecchi
- DF: Giorgio Scalvini, Isak Hien, Sead Kolašinac
- MF: Davide Zappacosta, Marten de Roon, Éderson, Nicola Zalewski
- FW: Charles De Ketelaere, Giacomo Raspadori, Nikola Krstović
Expert's Post-Match Verdict
From a tactical standpoint, this was a story of Atalanta’s explosive start against Milan’s belated response. Palladino’s side executed their game plan with sharp vertical attacks and precise finishing in the first hour (3 goals from 1.08 xG and 5 shots on target), capitalising on Milan’s passive pressing and disjointed defensive structure. Their 43% share of possession was by design, allowing them to sit compact, win duels, and spring quickly through Éderson, Raspadori, and the wing-backs.
Allegri’s Milan, by contrast, controlled territory and the ball (57% possession, 20 total shots, xG 1.94) but lacked incision until the game state forced them into a more aggressive, risk-heavy posture. The introduction of Nkunku, Füllkrug, Estupiñán, and Fofana tilted the momentum, reflected in Milan’s 9 shots on target and late goals, yet the structural frailty that allowed Atalanta to go 3-0 up proved decisive. Atalanta’s defensive resilience, anchored by Carnesecchi’s 8 saves and a back line willing to absorb pressure, ultimately turned a relatively modest attacking output into a high-value away win, while Milan’s late rally served more as a warning about their vulnerability in transition than a consolation.






