At Stadio Renato Dall’Ara on Tuesday night, AC Milan delivered a ruthless 3–0 win over Bologna in Serie A’s Round 23, a result that underlined the gap between a top‑four contender and a mid‑table side. Early goals from Ruben Loftus-Cheek and Christopher Nkunku, followed by Adrien Rabiot’s strike just after half-time, settled the contest well before the final whistle. While Bologna saw more of the ball, Milan’s superior cutting edge was decisive, allowing the visitors to consolidate second place and maintain pressure at the top, while Bologna stay marooned in mid-table.
First Half Analysis
The pattern of the match was set inside 20 minutes. In the 20' minute, AC Milan struck first: Ruben Loftus-Cheek finished off a move supplied by Adrien Rabiot, giving the visitors an early 1–0 lead and immediate control of the scoreboard.
Bologna tried to respond within their 4-2-3-1 structure, but the key moments kept falling Milan’s way. In the 39', Christopher Nkunku converted from the penalty spot to double the advantage to 2–0. With no first-half bookings and no response on the scoresheet from the hosts, the half-time numbers told a simple story: Milan went into the break two goals up, having made their few clear openings count, while Bologna’s possession and attacking intentions lacked the precision to trouble Mike Maignan decisively before the interval.
Second Half & Tactical Shifts
Any hope of a Bologna comeback was effectively extinguished almost immediately after the restart. In the 48', Adrien Rabiot added Milan’s third with a normal-play goal, stretching the lead to 3–0 and giving the visitors a cushion that allowed them to manage the game thereafter.
Frustration began to show for Bologna. Goalkeeper Federico Ravaglia was booked for argument in the 51', before coachless Bologna’s bench reacted with a double substitution: at 53', Riccardo Orsolini went off for Federico Bernardeschi, and at 54', centre-forward Santiago Castro made way for Thijs Dallinga. Those like-for-like changes in attacking areas suggested a search for fresh ideas rather than a structural overhaul.
The tone grew more combative. Remo Freuler collected a yellow card for a foul in the 58', and Lewis Ferguson followed with another booking for a foul in the 64', as Bologna’s midfield struggled to contain Milan’s control in transition. Freuler was then withdrawn in the 65', replaced by Nikola Moro, a move aimed at rebalancing a midfield that was both stretched and on a booking.
Milan, already three goals to the good, turned to squad management. In the 67', Ruben Loftus-Cheek was replaced by Samuele Ricci, and Zachary Athekame went off for defender Fikayo Tomori, reinforcing the back line and shifting the emphasis to game management. On 72', Christopher Nkunku was substituted for Niclas Füllkrug and Luka Modrić departed for Ardon Jashari, refreshing both the forward line and midfield legs.
Bologna kept searching for a spark, altering the left side and attacking midfield in the 78': Juan Miranda was replaced by Charalampos Lykogiannis, and Jonathan Rowe made way for Nicolò Cambiaghi. But the pattern remained largely unchanged. Milan’s final switch came in the 83', with Davide Bartesaghi replaced by Pervis Estupiñán, adding fresh energy on the flank to see out a comfortable away win.
Statistical Deep Dive
The numbers underline how controlled Milan’s performance was despite conceding the majority of possession. Bologna had 54% of the ball, completing 430 of 491 passes at an impressive 88% accuracy. Milan, with 46% possession and 361 accurate passes from 429 (84%), were content to let Bologna circulate the ball, backing their defensive structure and threat on the break.
In attack, the contrast was stark. Bologna produced 13 total shots but only 2 on target, with an expected_goals figure of just 0.45, illustrating how few truly dangerous chances they carved out. Milan, by contrast, were devastatingly efficient: 10 shots, 7 on target, and an expected_goals of 2.66, almost perfectly aligned with their three-goal haul. All of Milan’s attempts came from inside the box, reflecting their ability to work high-quality positions, while Bologna split their efforts between distance and crowded central areas.
Discipline also told a story of a chasing home side. Bologna committed 14 fouls and picked up all three yellow cards in the match, while Milan, with 10 fouls and no bookings, managed their aggression more cleanly. The absence of red cards kept the contest straightforward, but the card distribution mirrored the scoreboard: Bologna often late to duels, Milan largely in control.
Standings & Implications
For Bologna, the defeat leaves them 10th on 30 points with a goal difference of +2 (32 scored, 30 conceded), reinforcing their status as a solid but inconsistent mid-table side. Their recent form of LLLWD now looks even more fragile, and this home loss (now 4 wins, 2 draws, 5 defeats at Dall’Ara) stalls any push towards the European places.
AC Milan, meanwhile, move to 50 points from 23 games, with a formidable goal difference of +21 (38 for, 17 against) and just a single league defeat all season. Unbeaten away from home (7 wins, 5 draws), this clinical victory keeps them firmly in second place and strengthens their position in the Champions League race, maintaining pressure on the leaders in the Serie A title picture.





