Bologna 0-3 AC Milan Match Report: Rossoneri Dominate Serie A Matchday 23 | Rabiot, Nkunku & Loftus-Cheek Score
Serie A 2025/26 — Matchday 23

BOLOGNA 0 — 3 AC MILAN

Rossoneri Deliver a Ruthless Masterclass at the Dall’Ara to Extend Unbeaten Run to 22 Games

Bologna
10th — 30 pts
0 : 3
AC Milan
2nd — 50 pts
📅 3 February 2026 🏟️ Stadio Renato Dall’Ara ⏱️ KO 19:45 CET 👨‍⚖️ Referee: TBC
📋

Match Overview

AC Milan delivered their most complete away performance of the season, dismantling Bologna 3-0 at the Stadio Renato Dall’Ara in a commanding display that extended their unbeaten Serie A run to 22 consecutive matches. Despite several key absences — including Rafael Leão and Christian Pulisic — the Rossoneri were ruthless in both halves.

Ruben Loftus-Cheek broke the deadlock with a close-range header on 20 minutes, before Christopher Nkunku doubled the lead from the penalty spot after being fouled by goalkeeper Ravaglia. Just three minutes into the second half, Adrien Rabiot killed the contest with a brilliant individual effort — winning the ball from a Bologna throw-in, driving forward, and beating Ravaglia with a left-footed diagonal finish. Milan could have scored more, with Nkunku, Loftus-Cheek, and substitute Füllkrug all going close.

0.45
Bologna xG
2.66
Milan xG
👥

Starting Lineups

🔵🔴 BOLOGNA FC
Formation: 4-2-3-1
  • GK Ravaglia PEN conceded 39′
  • RB Zortea
  • CB Casale
  • CB Heggem
  • LB Miranda 🔄 54′
  • CM Ferguson
  • CM Freuler 🔄 65′
  • RW Orsolini 🔄 53′
  • AM Odgaard
  • LW Rowe 🔄 53′
  • ST Castro 🔄 54′
🔴⚫ AC MILAN
Formation: 3-5-2
  • GK Maignan
  • CB De Winter
  • CB Gabbia
  • CB Pavlović
  • RWB Athekame 🅰️ 20′ | 🔄 67′
  • CM Fofana 🅰️ 20′
  • CM Modrić 🔄 82′
  • CM Rabiot ⚽ 48′ | 🅰️ 20′
  • LWB Bartesaghi
  • ST Loftus-Cheek ⚽ 20′ | 🔄 67′
  • ST Nkunku ⚽ 39′ (P) | 🔄 82′
🧠

Tactical Analysis

Allegri deployed his trusted 3-5-2 system with De Winter, Gabbia, and Pavlović across the backline. The key tactical adjustment was in the midfield triangle — Modrić sat deep as the regista, while Rabiot was given a more advanced, free-roaming role that proved devastating. Fofana provided the defensive screen, allowing the other two midfielders to push forward with impunity.

🔴 Milan — Pressing Trap

Milan set up a high press in the first 30 minutes that completely suffocated Bologna’s build-up. Fofana’s ball-winning in midfield directly led to the first goal, while the front two of Loftus-Cheek and Nkunku pressed Bologna’s centre-backs relentlessly. This forced Bologna into long balls that played straight into the hands of Milan’s aerial-dominant back three. Milan created 9 big chances compared to Bologna’s zero.

🔵 Bologna — Failed High Line

Vincenzo Italiano set up Bologna in an aggressive 4-2-3-1 looking to press Milan high. However, Modrić’s ability to receive under pressure and distribute quickly rendered the press ineffective. Bologna’s high defensive line was repeatedly exploited by Nkunku’s intelligent movement in behind. After going 2-0 down, Italiano shifted to a more conservative shape, but the damage was already done.

⚔️ Rabiot’s Free Role

The standout tactical decision was Rabiot’s advanced positioning. He operated as a box-to-box midfielder who was given license to arrive late in the penalty area. His assist for Loftus-Cheek’s opener showcased his composure, while his solo goal — winning the ball from a throw-in and finishing with precision — demonstrated why Allegri made him a priority summer signing.

🔄 Game Management

After Rabiot’s 48th-minute goal made it 3-0, Allegri shifted Milan into conservation mode. The Rossoneri sat deeper, conceded territory (Bologna reached 54% possession), and focused on protecting the clean sheet. The substitutions of Athekame → Tomori and Loftus-Cheek → Ricci at 67′ reinforced this — Tomori slotted in as a wing-back with defensive cover, while Ricci helped recycle possession.

“They’re not under pressure in the standings, but they were looking to redeem themselves after recent poor results. We had to put on a very focused performance against such an intense and aggressive team. What we’ve achieved so far has got us to where we are, but the challenges ahead still need to be conquered.”

— Massimiliano Allegri, Pre-Match Press Conference
⏱️

Minute-by-Minute Timeline

1′ Kick-off at the Stadio Renato Dall’Ara. Milan in their white away kit, Bologna in traditional red and blue stripes.
5′ Milan press high from the start. Fofana intercepts a loose pass from Freuler and drives forward — eventually recycled wide.
11′ Odgaard attempts a long-range effort for Bologna — Maignan saves comfortably. Bologna’s first real attempt.
14′ Modrić threads a ball through the lines to Nkunku — Casale intercepts just in time. Milan probing.
17′ Nkunku flicks a poor header wide from a promising Athekame cross. Milan should have done better.
20′ ⚽ GOAL! Loftus-Cheek (0-1)
A scrappy but well-worked goal. Fofana wins the ball in midfield, feeds Rabiot on the half-turn, who finds Athekame overlapping on the right. The cross is flicked on by Nkunku — a poor header — but the ball deflects into the path of Loftus-Cheek, who finishes from close range. Milan lead!
26′ Orsolini cuts inside and curls a shot — deflected behind for a corner. Bologna trying to respond.
31′ Modrić plays a sublime through ball for Nkunku, who rounds Miranda but the angle is too tight.
35′ Odgaard fires from distance again — Maignan parries away. Bologna’s best spell of the half.
38′ PENALTY for Milan! Nkunku drives at the Bologna defence and goes one-on-one with Ravaglia, who brings him down inside the box. Clear foul — no protest.
39′ ⚽ GOAL! Nkunku (0-2, penalty)
Cool and composed from the spot. Nkunku sends Ravaglia the wrong way with a side-footed finish into the bottom left corner. His 5th league goal of the season. Milan in complete control.
43′ Rabiot strides forward and plays a one-two with Loftus-Cheek — final pass is intercepted by Ferguson.
45+1′ Bologna corner — headed clear by De Winter. Comfortable ending to the half for Milan.
⏸️ HALF TIME — BOLOGNA 0 : 2 MILAN
46′ Second half underway. No changes at the break for either side.
47′ Bologna throw-in near their own box — Rabiot pounces on a loose ball and drives towards goal…
48′ ⚽ GOAL! Rabiot (0-3)
STUNNING from Rabiot! He wins the ball from a Bologna throw-in, surges forward with purpose, beats one challenge, and unleashes a precise left-footed diagonal finish past Ravaglia into the far corner. Game over. Three goals, zero response from Bologna.
50′ Nkunku misses a chance for a brace — one-on-one with Ravaglia but shoots wide. Should have scored.
53′ 🔄 Bologna double change: Bernardeschi on for Orsolini, Cambiaghi on for Rowe.
54′ 🔄 Bologna triple change: Dallinga on for Castro, Lykogiannis on for Miranda.
Italiano throws on five substitutes in quick succession. Desperate measures from the hosts.
58′ Milan calmly recycling possession. Bologna pressing but Milan are untouchable in midfield.
63′ Loftus-Cheek goes close with a curling effort from the edge of the box — just wide of the far post.
65′ 🔄 Bologna: Moro on for Freuler.
67′ 🔄 Milan double change: Tomori on for Athekame, Ricci on for Loftus-Cheek.
Allegri freshens the legs and reinforces the right flank. Tomori slots in at RWB.
74′ Bologna controlling the ball but creating nothing. Milan’s defensive shape is impenetrable.
79′ Bernardeschi tries his luck from 25 yards — blocked by Pavlović. Bologna’s frustration grows.
82′ 🔄 Milan double change: Jashari on for Modrić, Füllkrug on for Nkunku.
85′ Füllkrug put through by Jashari — one-on-one with Ravaglia but SAVED! Should have made it four.
88′ Füllkrug denied again by Ravaglia from close range. The Bologna keeper is at least preserving his dignity.
90+3′ FULL TIME! Milan cruise to a comprehensive 3-0 victory. A statement win at the Dall’Ara.
📊

Match Statistics

54% Possession 46%
13 Total Shots 10
2 Shots on Target 7
0 Big Chances 9
0.45 Expected Goals (xG) 2.66
0 Saves 2
5 Corners 4
11 Fouls Committed 9
🔥

Key Moments

20′MIN

Loftus-Cheek Opens the Floodgates

A scrappy but decisive goal. Fofana’s ball-winning in midfield started the move, Rabiot’s composure in the build-up was crucial, and Athekame’s cross from the right caused chaos. Nkunku’s poor header inadvertently created the assist, and Loftus-Cheek showed predatory instinct to finish from 6 yards.

39′MIN

Nkunku Penalty — Clinical Conversion

Nkunku’s intelligent run in behind the defence forced goalkeeper Ravaglia into a desperate challenge inside the box. From the spot, the Frenchman was ice-cold — sending Ravaglia the wrong way for his 5th league goal of the season. The 2-0 scoreline flattered nobody; Milan were dominant.

48′MIN

⭐ Rabiot’s Solo Stunner — Game Over

The goal that defined the night. Three minutes into the second half, Rabiot pounced on a loose ball from a Bologna throw-in — a criminal error from the hosts. He drove forward 40 yards, rode a challenge, and finished with a precise left-footed diagonal shot into the far corner. Three goals in his last four league matches — vintage Rabiot under Allegri.

85′MIN

Ravaglia’s Redemption Saves

Despite his penalty blunder, Ravaglia produced two excellent saves from substitute Füllkrug in the closing stages. First, a sharp stop from a Jashari through ball, then a point-blank block from close range. Without him, Milan could easily have scored five or six.

Player Ratings — AC Milan

Player Pos Rating Performance Notes
Mike Maignan GK 6.0 Barely tested — just two shots on target to deal with. Comfortable saves from Odgaard’s long-range efforts. Good distribution to help build from the back.
Koni De Winter CB 6.5 Growing in stature every week. Won numerous aerial duels, showed great positioning, and looked commanding at the back. Strong performance.
Matteo Gabbia CB 6.5 Used smart tricks to unsettle Castro throughout. Remained calm in tricky build-up situations. Excellent reading of the game.
Strahinja Pavlović CB 6.0 Solid defending as always. Bologna got through a couple of times on his side, but his forward runs added another dimension to Milan’s attack.
Zachary Athekame RWB 6.5 Seized his chance brilliantly. Always on the move, and the cross for the first goal — delivered with his weaker foot — showcased his quality in the final third.
Youssouf Fofana CM 6.0 Excellent ball-winning for the opening goal and some neat passing early on. Faded noticeably as the game progressed.
Luka Modrić CM 7.0 The maestro. Constantly rescued Milan when pressed, with movement that frustrated Bologna’s high press. Passing was exquisite throughout. Vital in controlling the tempo.
Adrien Rabiot MOTM CM 8.0 Masterclass. Calm and collected assist for the opener, then a sensational solo goal to kill the game at 3-0. Three goals in his last four Serie A matches. Man of the Match.
Davide Bartesaghi LWB 6.0 A quiet night offensively with Milan attacking more through the right. Defensively solid when called upon. A couple of moments where Bologna got through on his flank.
Ruben Loftus-Cheek ST 7.0 Clinical finish for the opener, strong hold-up play, and went close again in the 63rd minute. Disciplined and effective in the front two.
Christopher Nkunku ST 7.5 Won the penalty and converted with composure — 5th league goal of the season. Perfect movement for the first goal. Missed a one-on-one at 50′, but an excellent overall display.
Substitutes
Fikayo Tomori RWB 6.0 Slotted in at right wing-back with defensive cover behind him. Looked comfortable and enjoyed his time on the pitch.
Samuele Ricci CM N/A Came on at 67′. A few passes here and there but not enough time to make a significant impact.
Ardon Jashari CM 6.0 Good defensive work using his low centre of gravity. Provided a lovely through ball for Füllkrug’s late chance.
Niclas Füllkrug ST 5.5 Involved in late chances but needed to do better with his one-on-one. Denied twice by Ravaglia — should have scored at least once.
📝

Player Ratings — Bologna FC

Player Pos Rating Performance Notes
Federico Ravaglia GK 5.5 A paradox: conceded the penalty by fouling Nkunku, yet made two crucial saves from Füllkrug late on to prevent further embarrassment. Bologna’s best player despite the error.
Nadir Zortea RB 5.0 Struggled to contain Bartesaghi and Pavlović’s overlapping runs. Offered little going forward.
Nicolò Casale CB 4.5 Overwhelmed by Nkunku’s movement and Loftus-Cheek’s physicality. Poor positional awareness throughout.
Torbjørn Heggem CB 4.5 A nightmare evening. Caught out of position repeatedly and offered no resistance against Milan’s movement.
Juan Miranda LB 4.0 The lowest-rated player on the pitch. Athekame had him on toast in the first half. Substituted at half-time — a night to forget.
Lewis Ferguson CM 5.5 Tried to drive Bologna forward but was overrun by the Modrić-Rabiot axis. Some decent tackles but no creative output.
Remo Freuler CM 5.5 Lost possession in dangerous areas too often. The loose ball that Fofana seized for the first goal originated from Freuler’s zone.
Riccardo Orsolini RW 5.0 One curling effort aside, Orsolini was effectively neutralized by Pavlović and Bartesaghi. Replaced at 53′.
Jens Odgaard AM 5.5 Bologna’s most adventurous player — two long-range efforts forced saves from Maignan. But produced nothing in the final third where it mattered.
Jonathan Rowe LW 5.0 Anonymous on the left wing. Offered no width and was unable to find pockets of space against De Winter.
Santiago Castro ST 5.0 Completely shut down by Gabbia’s clever defending. Won very few duels and had zero shots on target. Replaced at 54′.
Substitutes
Federico Bernardeschi RW 6.0 Brought energy and tried to make things happen. One blocked effort from distance.
Thijs Dallinga ST 6.0 More mobile than Castro and held the ball up better. But the game was long gone by the time he entered.
Charalampos Lykogiannis LB 6.0 Improved the left flank after Miranda’s disastrous first half. Solid without being spectacular.
Andrea Cambiaghi LW 6.0 Added directness from the left after Rowe’s ineffective display.
Nikola Moro CM 5.5 Replaced Freuler at 65′ but struggled to change the game’s dynamic in any meaningful way.
🏆

Serie A Impact

This comprehensive victory lifted Milan to 50 points from 23 matches, solidifying their position in 2nd place and closing the gap to leaders Inter Milan to just 5 points. It was Milan’s 13th league win of the season and their 22nd consecutive unbeaten match — a remarkable streak that now dates back to September 2025.

For Bologna, the defeat compounded a miserable run — their third consecutive loss, dropping them to 10th place with 30 points. Vincenzo Italiano’s side have now conceded 8 goals in three games, raising serious questions about the coach’s future. The fans at the Dall’Ara were visibly frustrated at full time.

Notably, Milan achieved this result without Leão and Pulisic — their two biggest attacking stars. The depth of Allegri’s squad was on full display, proving the Rossoneri are not reliant on any single individual. Five goals from his last seven Serie A matches for Nkunku, three in four for Rabiot — the French connection is firing on all cylinders.

📰

Final Verdict

This was the kind of performance that wins titles. Milan’s xG dominance (2.66 vs 0.45), their clinical finishing (3 goals from 7 shots on target vs Bologna’s 0 from 2), and the 9-0 big chances advantage tell the story of a team operating at an entirely different level to their opponents.

Adrien Rabiot was the headline act — his assist and solo goal perfectly encapsulating why Allegri moved heaven and earth to bring him to San Siro. But this was a collective masterclass: Modrić’s orchestration, Nkunku’s ruthlessness, Loftus-Cheek’s reliability, and a defence that conceded an xG of just 0.45 away from home.

With the Scudetto race heating up and Inter just five points ahead, I Rossoneri served notice that they will push their city rivals all the way to the final day.

Categorized in:

Milan,

Last Update: March 25, 2026