Rossoneri came flying out of the blocks and took the lead inside the opening three minutes, as Alvaro Morata touched the ball through for Christian Pulisic to run onto and, after realising he had no support, smash into the far corner.
Theo Hernandez was left with a bloodied mouth following the celebrations, but Liverpool couldn’t initially strike a blow back as Mohamed Salah’s effort crashed against the crossbar.
The Reds, though, were eventually level in the 23rd minute. Davide Calabria slid in on Cody Gakpo, conceding a free-kick that Trent Alexander-Arnold floated in for Ibrahima Konate to dominantly head home.
Chances subsequently came more freely for the visitors, although Diogo Jota slid his attempt wide and Salah was denied by the crossbar again before the ball bounced off Mike Maignan’s boot and away from danger.
It was another set-piece that gave them the lead, as Virgil van Dijk marked his 50th UCL appearance by heading in Kostas Tsimikas’ corner delivery.
Maignan saved Gakpo’s shot before the break having already gone down twice, but the goalkeeper was finally forced to make way for 19-year-old Lorenzo Torriani in the 51st minute after bravely denying Jota.
While that fed into the frustrations among the San Siro’s home crowd, the debutant appeared unfazed by the occasion’s magnitude and did enough to deny Dominik Szoboszlai on two occasions.
The Hungarian wasn’t to be stopped a third time, though, as Gakpo cut through Milan’s defence and teed him up for a finish that went in off the post.
Tammy Abraham was unable to capitalise on an underhit Alisson Becker pass to cause concern, allowing Liverpool to convincingly recover from their Premier League loss against Nottingham Forest to make it four wins in five matches under Arne Slot.
In contrast, Milan have just one win from their five competitive games this term. Things won’t get much easier for Paulo Fonseca with Internazionale and Bayer Leverkusen coming up over their next three matches.
Flashscore Man of the Match: Cody Gakpo (Liverpool)