At Stadio Renato Dall’Ara on Tuesday night, AC Milan produced a clinical 3–0 away win over Bologna in Serie A’s Round 23, reinforcing their position as Inter’s closest pursuers near the top of the table. Two first-half strikes from Ruben Loftus-Cheek and Christopher Nkunku, followed by an early second-half goal from Adrien Rabiot, settled a contest where Milan needed far fewer chances to inflict heavy damage. The result leaves Bologna marooned in mid-table on 30 points, while Milan move to 50 points and continue to look like a secure bet for Champions League qualification.
First-half analysis
The pattern of the match was established early: Bologna saw plenty of the ball but Milan were ruthless when opportunities arose. The breakthrough arrived on 20', when Ruben Loftus-Cheek finished a move for the visitors, with Adrien Rabiot providing the assist. That opener allowed Milan’s 3-5-2 to sit a little deeper, trusting the experience of Luka Modrić and the athleticism of Youssouf Fofana to manage transitions.
Bologna’s 4-2-3-1, with Santiago Castro up front and Riccardo Orsolini, Jens Odgaard and Jonathan Rowe in support, struggled to turn possession into clear chances before the interval. Their task became even harder on 39', when Christopher Nkunku converted from the penalty spot to double Milan’s advantage. With no cards or substitutions before half-time, Bologna went into the break 2–0 down, punished for defensive lapses and an inability to match Milan’s cutting edge in the final third.
Second half and tactical shifts
Any hopes of a Bologna comeback were dealt a heavy blow almost immediately after the restart. On 48', Adrien Rabiot capped a standout performance by adding Milan’s third goal, effectively killing the contest with more than 40 minutes still to play.
Frustration began to show in the hosts’ ranks. Goalkeeper Federico Ravaglia was booked for argument on 51', and coachless Bologna turned to their bench soon after. On 53', Riccardo Orsolini made way for Federico Bernardeschi, a like-for-like attacking switch aimed at refreshing the right flank. A minute later, central striker Santiago Castro was replaced by Thijs Dallinga on 54', a straight swap up front to seek a different reference point in attack.
The midfield battle grew increasingly scrappy. Remo Freuler picked up a yellow card for a foul on 58', and Lewis Ferguson followed with his own caution on 64', underlining Bologna’s difficulties in stopping Milan’s counters. Freuler was then withdrawn on 65', with Nikola Moro coming in to bring fresh legs and perhaps more composure in the double pivot.
Milan, also officially without a named coach in the data, responded with controlled, conservative changes designed to protect the lead. On 67', goalscorer Loftus-Cheek came off for Samuele Ricci, shifting the visitors towards a more orthodox midfield unit, while Zachary Athekame was replaced by defender Fikayo Tomori in the same minute, subtly moving from 3-5-2 into a more secure back line. On 72', Christopher Nkunku was replaced by Niclas Füllkrug and Luka Modrić by Ardon Jashari, keeping energy high up front and in midfield without altering the game’s balance.
Bologna’s final roll of the dice came on 78', when left-back Juan Miranda was substituted by Charalampos Lykogiannis and Jonathan Rowe made way for Nicolò Cambiaghi, adding fresh legs down the flank and in the attacking band. Milan’s last change on 83' saw Davide Bartesaghi replaced by Pervis Estupiñán, another defensive-minded move to see out the clean sheet.
Statistical deep dive
The numbers underline a paradoxical evening for Bologna. They actually controlled 54% of the ball and completed 430 of 491 passes, an impressive 88% accuracy, compared to Milan’s 46% possession and 84% pass completion (361 of 429). Yet it was Milan who consistently turned their phases of play into real threat.
Bologna attempted more shots overall (13 to Milan’s 10) but managed only 2 on target, reflected in a modest expected goals figure of 0.45. Milan, by contrast, were devastatingly efficient: 10 shots, all from inside the box, with 7 on target and an xG of 2.66, almost perfectly aligned with their three-goal haul. Bologna’s Ravaglia made 4 saves, while Mike Maignan was called into action just twice.
Discipline also told a story. Bologna committed 14 fouls to Milan’s 10 and collected all three yellow cards shown on the night, indicative of a home side increasingly chasing the game and resorting to stoppages to halt Milan’s transitions. Milan, notably, finished without a single booking.
Standings and implications
For Bologna, the defeat leaves them 10th on 30 points, with a goal difference of +2 (32 scored, 30 conceded) after 23 matches. Their recent form line of LLLWD now takes another dent, and with a home record of four wins, two draws and five losses, European ambitions look distant.
Milan, meanwhile, consolidate second place on 50 points with a formidable goal difference of +21 (38 for, 17 against). Unbeaten away from home this season (seven wins, five draws), they continue to justify their status as strong Champions League contenders and the most credible challengers to the league leaders in the title race.





