One Adrien Rabiot moment is all it takes. At the Stadio Marcantonio Bentegodi, on Matchday 33 of Serie A, AC Milan grind out a 0-1 win at Hellas Verona thanks to a 41st-minute finish from the French midfielder, set up by Rafael Leao. Far from a vintage performance — Milan spent long spells under pressure in the second half — but three points that carry serious weight: the Rossoneri climb to 66 points and draw level with Napoli, who lost to Lazio on Saturday, for second place. The afternoon is marred by racist chants aimed at Maignan and Leao from sections of the Verona support, but the sporting takeaway is clear: the Champions League race is wide open again ahead of AC Milan vs Juventus on matchday 34.
Match report: Milan edge an ugly game at the Bentegodi
Massimiliano Allegri lines up with the expected 3-5-2, but with a twist: Zachary Athekame starts at right wing-back ahead of the fitter Alexis Saelemaekers. Up top the usual Leao-Pulisic pairing, a midfield trio of Fofana-Modric-Rabiot, and a back three of Tomori-Gabbia-Pavlovic protecting Mike Maignan. Paolo Sammarco's Verona, meanwhile, abandons the 3-5-2 previewed earlier in the week and switches to a 3-4-2-1, with Belghali and Bradaric dropping in behind lone striker Gift Orban; a back three of Edmundsson, Nelsson and Bernede, and a four-man midfield of Oyegoke, Akpa Akpro, Gagliardini and Valentini.
The first half is a cagey affair. Verona threaten in the opening exchanges through Edmundsson, then Davide Bartesaghi forces Montipo into a save with a left-footed effort from distance around the half-hour mark. The breakthrough arrives on 41 minutes: Leao picks the ball up on the left, drifts inside and slides it to the edge of the box, where Rabiot has timed his run perfectly, controls with his left foot and finishes past the Verona goalkeeper. 1-0. Just before the break Belghali almost catches Maignan cold with a dipping effort, but the French keeper is alert.
The second half is a different story. Sammarco makes a halftime change, introducing Vermesan for Bradaric, and Verona turn up the pressure. Milan sit deep, start to suffer, and Matteo Gabbia has to be at his best to repel a string of dangerous moments. On 63 minutes Allegri makes a triple change: Leao, Athekame and Fofana off, Gimenez, Saelemaekers and Ricci on. The game's most controversial moment arrives on 74 minutes, when Gabbia bundles in what looks like a second goal — only for VAR to rule it out for a Gimenez offside in the build-up. In stoppage time, Valentini clears a Saelemaekers effort off the line. Final whistle: 0-1. Ugly, but effective.
The goal: Rabiot puts Milan back into second place
The move begins with a Milan turnover in central midfield. Rafael Leao collects on the left, accelerates into the half-space and slides a low ball across to the edge of the area. Adrien Rabiot's run is a centre-forward's run: perfectly timed, arriving late from deep, he controls with his left and places it past Montipo. 1-0 AC Milan on 41 minutes.
Rabiot is now up to 6 goals and 5 assists this season — 11 goal contributions in his debut campaign in red and black — confirming his status as Allegri's go-to player: box-to-box running, clean finishing, aerial presence and leadership. Italian outlet 90min calls him “irreplaceable”, while Milan Vibes labels him “decisive”. For Leao it's the assist of the day in a match where he struggled physically: less fluid than usual, less sharp in 1v1s, but one piece of quality was enough.
AC Milan player ratings: Rabiot and Gabbia lead, Gimenez the flop
Ratings averaged across three Italian outlets: Goal Italia, Il Gazzettino and Milan Vibes.
AC Milan ratings — starters
Maignan 6.5 — Alert on Belghali before the break, confident on crosses. No real blame on anything that came his way.
Tomori 6 — Solid on the right side of the back three, clean positionally.
Gabbia 7 — The pick of the defence. Dominant in the air, makes the match-saving interventions in the second half. The 74th-minute goal that would have sealed it gets chalked off, but he was immense.
Pavlovic 6.5 — Brave, aggressive line, leads the defensive block.
Athekame 5.5 — Rushed and imprecise with the ball. Allegri pulls him on 63'.
Fofana 5.5 — Sloppy technically, gives away a dangerous free kick with a needless foul. Off night.
Modric 6.5 — Brings tempo whenever he touches the ball. The usual metronome.
Rabiot 7 — Man of the match. Goal at 41', relentless running, physical domination in midfield. “Irreplaceable” (90min), “decisive” (Milan Vibes).
Bartesaghi 5.5 — Inaccurate in the final third, better defensively. Quiet afternoon overall.
Leao 6.5 — The assist for Rabiot earns him a pass. Less sharp physically, loses a few duels, but the quality is there when it matters.
Pulisic 5.5 — Too far from goal, unable to impact the match. Forgettable.
AC Milan ratings — substitutes
Saelemaekers 6 — Effective defensively once on.
Ricci 6 — Comes into a tough moment, has a couple of pops from distance.
Gimenez 5 — Flop of the day. Loses possession, fluffs chances and is flagged offside in the build-up to Gabbia's disallowed goal.
Nkunku sv — Late cameo on 80', not enough minutes to judge.
Verona 0-1 AC Milan: match stats
Match stats
Hellas Verona 0 — AC Milan 1 (0-1 HT)
Scorer: Rabiot 41' (M)
Verona (3-4-2-1): Montipo; Edmundsson, Nelsson, Bernede (83' Isaac); Oyegoke (21' Lirola), Akpa Akpro (64' Al-Musrati), Gagliardini (83' Lovric), Valentini; Belghali, Bradaric (45' Vermesan); Orban. Coach: Sammarco.
AC Milan (3-5-2): Maignan; Tomori, Gabbia, Pavlovic; Athekame (63' Saelemaekers), Fofana (63' Ricci), Modric, Rabiot, Bartesaghi; Leao (63' Gimenez), Pulisic (80' Nkunku). Coach: Allegri.
Referee: Daniele Chiffi (Padova) — VAR: Mazzoleni — AVAR: Gariglio.
Bookings: Akpa Akpro 24' (V), Al-Musrati 84' (V). No Milan player booked.
Disallowed goal: 74' Gabbia (M), ruled out for a Gimenez offside.
Serie A table: AC Milan catch Napoli for second place
The win at the Bentegodi lifts AC Milan level with Napoli at 66 points in Serie A. Antonio Conte's side lost at home to Lazio on Saturday, opening the door the Rossoneri walked through on Sunday. Further back, Como and Roma sit on 58 points, now a clear eight points behind Milan, while Juventus (60) face a must-win trip to San Siro on matchday 34.
A month ago the title race looked over and Milan's Champions League place was genuinely in doubt. Today the Rossoneri are level for second with five matchdays to play, and the narrative has flipped. For Hellas Verona, meanwhile, it's another step toward the inevitable: 18 points, bottom of the table alongside Pisa, with Serie B now a mathematical question of when, not if.
Streak extended to 11: Milan unbeaten at the Bentegodi for over 8 years
The Verona win extends Milan's unbeaten run against Hellas Verona in Serie A to eleven consecutive matches: eleven games, eleven wins. The last time the Rossoneri failed to take all three points against the Gialloblu was the 2-2 draw on 8 November 2020 at San Siro. The Bentegodi record is even more striking: this 0-1 makes it six straight wins on the road in Verona, over eight years unbeaten at the stadium since the 3-0 loss on 17 December 2017. A statistical anchor that Allegri's Milan have honoured in the middle of a wobbling season.
Racist chants at Maignan and Leao: Italian football's recurring shame
The afternoon had a darker side. After Milan's goal late in the first half, Leao and Rabiot celebrated in front of the Verona ultras section — and from that moment racist chanting from sections of the home support began. Through the second half the episodes repeated: Mike Maignan was jeered on “every touch”, while Leao was abused again when he came off on 63 minutes.
The stadium PA delivered the mandatory condemnation announcement and the league protocol warning that the match could be stopped. Referee Chiffi, however, did not suspend play. The Bentegodi has been at the centre of similar controversies in recent seasons, and Maignan — who famously walked off the pitch at Udine in 2024 over racist abuse — is once again at the centre of this recurring problem. A club statement from AC Milan is expected in the coming hours.
Looking ahead: AC Milan vs Juventus with a full squad
There's a bonus for Allegri: despite five players on yellow card warnings (Modric, Fofana, Athekame, Saelemaekers, Leao), no AC Milan player was booked at Verona. That means a fully available squad for matchday 34 — AC Milan vs Juventus at San Siro, the head-to-head that could mathematically decide Champions League qualification. Milan will arrive with Rabiot in red-hot form, Gabbia in vintage shape, and a table that suddenly reads much friendlier.
On the other side, Igor Tudor's Juventus have no margin left: at 60 points, a defeat at San Siro would effectively end their Champions League hopes. The script is written: whoever wins grabs a huge chunk of the European pass; whoever loses may have to settle for the Europa League.
Milan don't play well, they suffer, but they win. And in the business end of the season, that is everything. Rabiot turns an anonymous afternoon into a vital victory, Gabbia reminds everyone that he is the defender in the best form in the squad, and the Champions League is back on the table. But the Bentegodi leaves a bitter aftertaste: the racist abuse aimed at Maignan and Leao is a stain Italian football cannot keep accepting. Next up: AC Milan vs Juventus, a head-to-head that can define a season.
Forza Milan, sempre.