Federico Chiesa scored a brilliant brace as Juventus ended Milan's unbeaten start to the season and clinched a crucial 3-1 victory that moves the Serie A champions up to fourth in the table.

Andrea Pirlo's men produced a scintillating attacking display to become the first team to beat leaders Milan in the league in 28 matches and did so without leading scorer Alvaro Morata.

Ably assisted by Paulo Dybala on both occasions, Chiesa scored with confident finishes in either half and Milan's waves of attacking pressure found Juventus goalkeeper Wojciech Szczesny in fine form before Davide Calabria found the net.

The Bianconeri, who added a third through substitute Weston McKennie, will hope this was a turning point in a tumultuous season, having played with the guile and poise they have lacked for so much of it, while Milan will reflect on a missed opportunity to extend their lead at the top to four points after Inter lost to Sampdoria.

Juventus' high press overwhelmed Milan early on and Paulo Dybala tested Gianluigi Donnarumma from six yards before Chiesa crashed a thunderous shot onto the post.

With 18 minutes played the Old Lady's superb start paid dividends, Dybala's smart back-heel sending Chiesa into the area and the Fiorentina loanee sent a low shot bouncing into the far corner of Donnarumma's net from 12 yards.

Juve had Szczesny to thank for keeping them ahead with a string of saves but he was powerless to stop Calabria's shot from finding the top corner after the lively Rafael Leao teed him up – although Juventus claimed Adrien Rabiot was fouled in the build-up.

Szczesny got down well to save Diogo Dalot's powerful 20-yard shot as Milan came out firing after the interval but Juve weathered the storm before Aaron Ramsey missed a golden chance to give them the lead, shooting wide from close range with just Donnarumma to beat.

Just after the hour mark, Chiesa struck again, Dybala picking him out on the edge of the box where he bent a superb left-footed shot into the far corner.

Chiesa then left the field with an injury and was replaced by McKennie, who swept home Juventus' third in the 76th minute after a jinking run through Milan's defence by fellow substitute Dejan Kulusevski.

What does it mean? The fightback is on

Juventus have now won three of their last four Serie A matches and are playing with real verve.

Having had such a short pre-season with his side, Pirlo has been playing catch-up but his expansive, fast-attacking style of play seems to be finally bearing fruit as his players cut out defensive errors.

Dybala at his best

Dybala's two assists were as incisive and spectacular as Chiesa's finishes and the Argentina international also won six duels to help Juventus stay on top.

Leao rues missed chances

Milan could have been ahead at half-time had Leao made more of the clear-cut chances that fell to him and, despite his assist for Calabria's goal, he will remember this game for his three unsuccessful shots at goal.

Key Opta Facts

- Juventus have won 14 of their last 16 Serie A games against AC Milan (L2).
- AC Milan are enjoying the third-longest streak of Serie A consecutive matches with a goal: 36. In the history of the competition, the only two longer streaks have both been by Juventus: 43 in 2014 and 44 in 2017.
- Federico Chiesa has been involved in six Serie A goals against AC Milan (3 goals, 3 assists).
- Prior to Wednesday, the last time a player twice assisted the same Juve team-mate was in February 2018 against Sassuolo (Federico Bernardeschi to Gonzalo Higuain).

What's next?

Milan are at home against struggling Torino on Saturday, and Juventus entertain in-form Sassuolo a day later.