AC Milan vs Juventus: Tactical Stalemate in Serie A
AC Milan and Juventus played out a tense 0-0 at Stadio Giuseppe Meazza in Serie A’s Regular Season - 34, a match that was far richer tactically than the scoreline suggested. Under the eye of referee Simone Sozza, both sides leaned into their structural identities: Milan in a 3-5-2 built around control and vertical surges, Juventus in a 3-4-2-1 designed to dominate the ball and threaten in transition. Across 90 minutes, Juventus edged possession (53%) and shots on target (5–1), but Milan’s compactness and Mike Maignan’s command of his area preserved parity. The halftime score was 0-0, and despite adjustments and fresh attackers, neither side found a breakthrough.
Disciplinary Incidents
The disciplinary and event sequence underscored how finely balanced the contest was. The first major incident came on 20', when Andrea Cambiaso received a yellow card for a foul, an early marker of Juventus’s willingness to break Milan’s rhythm wide on their left. On 37', Khéphren Thuram had a goal cancelled by VAR, a crucial turning point: Juventus briefly thought they had the lead, but the intervention restored the stalemate before the interval.
Milan’s first booking arrived at 38', Davide Bartesaghi shown yellow for a foul, reflecting the intensity on Milan’s left flank where Cambiaso and Francisco Conceição were probing. At 46', immediately after the restart, AC Milan made the first structural change: Pervis Estupiñán (IN) came on for D. Bartesaghi (OUT), a like-for-like swap that brought a more assertive, overlapping profile at wing-back and also removed a booked player from a high-duel zone.
On 62', Niclas Füllkrug (IN) came on for C. Pulisic (OUT), shifting Milan’s front line from a mobile second striker to a more classic reference nine alongside Rafael Leão. Five minutes later, on 67', Samuele Ricci (IN) replaced Y. Fofana (OUT), tilting Milan’s midfield from ball-winning towards more controlled circulation.
Juventus responded with a double change on 71': Teun Koopmeiners (IN) for K. Thuram (OUT) and Emil Holm (IN) for A. Cambiaso (OUT), rebalancing their midfield with a deeper playmaker and a more orthodox wing-back. The next disciplinary flashpoint came at 72', when Jeremie Boga was booked for a foul, a symptom of Juventus’s increasingly aggressive counterpress after turnovers.
Milan’s second yellow card arrived at 75', Pervis Estupiñán cautioned for a foul, illustrating how much defensive load the substitute carried in wide isolation. At 80', Stefano Pioli’s side reshaped the attack and midfield: Christopher Nkunku (IN) for R. Leão (OUT) and Ardon Jashari (IN) for L. Modric (OUT). Simultaneously, Juventus altered their attacking line: Edon Zhegrova (IN) for F. Conceição (OUT) and Kenan Yıldız (IN) for J. Boga (OUT). The final card of the match came at 86', Manuel Locatelli booked for a foul, emblematic of his anchoring role in front of the back three. The last substitution on 88' saw Dušan Vlahović (IN) replace J. David (OUT), giving Juventus a more penalty-box-oriented striker for the closing moments. No red cards were shown.
Tactical Overview
Tactically, the baseline structures defined the rhythm. Milan’s 3-5-2 placed Mike Maignan behind a back three of Strahinja Pavlović (31), Matteo Gabbia (46), and Fikayo Tomori (23). Ahead of them, a five-man band of wing-backs and midfielders – Alexis Saelemaekers (56) and Bartesaghi (33) wide, with Youssouf Fofana (19), Luka Modrić (14), and Adrien Rabiot (12) inside – aimed to compress central spaces and spring Leão (10) and Christian Pulišić (11) into channels.
Juventus’s 3-4-2-1 mirrored that shape but with different intentions. Michele Di Gregorio in goal sat behind Pierre Kalulu (15), Bremer (3), and Lloyd Kelly (6). The midfield square of Andrea Cambiaso (27), Manuel Locatelli (5), Khéphren Thuram (19), and Weston McKennie (22) was built to dominate circulation and stretch Milan laterally, while Francisco Conceição (7) and Jeremie Boga (13) floated behind Jonathan David (30), attacking half-spaces and pulling Milan’s back three into uncomfortable decisions.
Goalkeeper Performances
Goalkeeper reality was decisive. Maignan registered 5 saves to Di Gregorio’s 1, despite Juventus only marginally trailing in total shots (10–8). Juventus generated more shots on target (5–1), often from incisive wide-to-central combinations and cutbacks, forcing Maignan to be sharp on low efforts inside the box (5 shots inside the box for Juventus). Milan’s single shot on target, from 8 total attempts, reflected their difficulty in converting territorial phases into clear chances, even with Leão’s dribbling and later Füllkrug’s presence as a target.
Substitution Impacts
The substitution vectors reshaped the latter stages. Estupiñán’s introduction gave Milan more thrust down the left but also increased exposure to counters, hence his yellow card. Ricci and Jashari gave Milan fresher legs and more positional discipline in midfield, but the removal of Modrić reduced their ability to thread high-value passes between Juventus’s lines. Up front, Füllkrug and Nkunku changed the nature of Milan’s attack from direct running into a mix of hold-up play and between-the-lines receiving, yet Juventus’s back three, marshalled by Bremer, handled the aerial and physical duels effectively.
For Juventus, Koopmeiners’ entrance for Thuram shifted the midfield from carrying and vertical surges to more measured, diagonal distribution, helping them maintain a 92% pass accuracy (462 accurate from 503 total) and a 53% share of possession. Holm for Cambiaso altered the right flank’s profile, with Holm more conservative in his starting positions, which helped control Milan’s counters but slightly reduced Juventus’s overlapping threat. The late introduction of Zhegrova, Yıldız, and Vlahović injected fresh attacking options but came against a Milan block that had grown increasingly narrow and conservative.
Statistical Insights
Statistically, the verdict underlines a finely poised tactical contest. Milan’s expected goals stood at 0.65 against Juventus’s 0.52, a narrow edge that contrasts with the shots-on-target disparity. This suggests that while Juventus tested Maignan more frequently, Milan’s few promising moments carried slightly higher underlying value, likely from closer-range or better-angled opportunities. Maignan’s 5 saves, with goals prevented measured at 0, indicate that Juventus’s efforts were generally of modest xG per shot, reflecting Milan’s success in forcing attempts from less optimal positions despite conceding territory.
In possession, Juventus’s higher completion rate (92% vs Milan’s 86%) and superior pass volume (503 vs 454) show a side comfortable circulating under pressure, especially through Locatelli and Koopmeiners. Milan, with 47% possession and 392 accurate passes, accepted longer phases without the ball, relying on a compact 5-3-2 defensive shell once wing-backs dropped alongside the back three. The foul count – 12 by Milan, 8 by Juventus – and yellow card tally (2 for Milan: Bartesaghi, Estupiñán; 3 for Juventus: Cambiaso, Boga, Locatelli) point to Milan making more tactical interventions to disrupt Juventus’s rhythm, particularly in wide areas.
Overall, the 0-0 reflects two well-organised structures neutralising each other: Juventus marginally superior with the ball, Milan slightly sharper in chance quality and defensive resistance, with both goalkeepers – particularly Maignan – ensuring that a single VAR intervention on 37' remained the closest either side came to breaking the deadlock.



