Ismael Bennacer’s first-half goal gave AC Milan a slender advantage over Napoli in the first leg of their all-Italian Champions League quarter-final.
The Algeria midfielder struck home from the edge of the area after Braham Diaz broke superbly on the halfway line.
Napoli had Andre-Frank Zambo Anguissa sent off in the second half and were well held by an organised Milan.
Milan also came close to a second goal when Simon Kjaer’s header bounced off the underside of the bar.
Napoli, in the Champions League last eight for the first time, were straight out of the traps, demonstrating a belief that comes from being 16 points clear at the top of Serie A.
Georgia winger Khvicha Kvaratskhelia had their best chance of the game in the opening minute after a poor clearance fell at his feet, but his effort from eight yards out was blocked on the line.
Napoli, the highest scorers in the competition this season, continued to push, with former Fulham midfielder Anguissa and Piotr Zielinski having efforts tipped over the bar.
Milan, who won 4-0 at Napoli 10 days ago in Serie A, weathered the storm and then grew into the game as Portugal winger Rafael Leao broke forward from his own half and slid an effort inches wide of the far post.
The 40th-minute winner was sparked by former Manchester City youth product Diaz, who showed great skill to let the ball run and turned to take two Napoli midfielders out of the game.
Bennacer, who played once in two years for Arsenal, then met Leao’s cut-back with a left-footed finish, which was helped into the roof of the net by the outstretched foot of visiting goalkeeper Alex Meret.
Milan’s Danish defender Kjaer was extremely unlucky with his powerful first-half stoppage-time header bouncing about a yard from the line after it struck the bar.
The second half was scrappy, with chances at a premium, but Anguissa earned two yellow cards in less than four minutes.
The first was for pulling down Theo Hernandez as the Frenchman looked to hit Napoli on the counter, before Anguissa caught the Milan left-back again with a high boot in the 74th minute.
Napoli will also be without defender Kim Min-jae for the second leg, which takes place next Tuesday, after he was booked for dissent in a frustrating second period.
Despite being a man down, though, Napoli almost found a late equaliser but Mike Maignan did superbly to claw Giovanni di Lorenzo’s effort behind for a corner.
How to play
Rate players out of 10 throughout or after the game. The rater will close 30 minutes after the final whistle.
Rating range key = Give it up = Pure perfection
Squad number16Player nameMaignan
Squad number2Player nameCalabria
Squad number24Player nameKjaer
Squad number23Player nameTomori
Squad number19Player nameHernández
Squad number33Player nameKrunic
Squad number8Player nameTonali
Squad number10Player nameDíaz
Squad number4Player nameBennacer
Squad number17Player nameRafael Leão
Squad number9Player nameGiroud
Squad number12Player nameRebic
Squad number56Player nameSaelemaekers
Squad number1Player nameMeret
Squad number22Player nameDi Lorenzo
Squad number13Player nameRrahmani
Squad number3Player nameKim Min-jae
Squad number6Player nameMário Rui
Squad number99Player nameZambo Anguissa
Squad number68Player nameLobotka
Squad number20Player nameZielinski
Squad number11Player nameLozano
Squad number7Player nameElmas
Squad number77Player nameKvaratskhelia
Squad number17Player nameOlivera
Squad number21Player namePolitano
Squad number81Player nameRaspadori
Squad number91Player nameNdombélé
- 2CalabriaBooked at 90mins
- 10DíazSubstituted forRebicat 80′minutes
- 4BennacerBooked at 60minsSubstituted forSaelemaekersat 67′minutesBooked at 90mins
- 17Rafael Leão
- 90De Ketelaere
- 22Di LorenzoBooked at 70mins
- 13RrahmaniBooked at 90mins
- 3Kim Min-jaeBooked at 78mins
- 6Mário RuiSubstituted forOliveraat 81′minutes
- 99Zambo AnguissaBooked at 74mins
- 20ZielinskiBooked at 38minsSubstituted forNdombéléat 81′minutes
- 11LozanoSubstituted forRaspadoriat 69′minutes
- 77KvaratskheliaSubstituted forPolitanoat 81′minutes
- 5Nunes Jesus
Match ends, AC Milan 1, Napoli 0.
Davide Calabria (AC Milan) is shown the yellow card.
Second Half ends, AC Milan 1, Napoli 0.
Foul by Mathías Olivera (Napoli).
Alexis Saelemaekers (AC Milan) wins a free kick in the defensive half.
Stanislav Lobotka (Napoli) wins a free kick in the defensive half.
Foul by Ante Rebic (AC Milan).
Foul by Giacomo Raspadori (Napoli).
Sandro Tonali (AC Milan) wins a free kick in the defensive half.
Alexis Saelemaekers (AC Milan) is shown the yellow card.
Amir Rrahmani (Napoli) is shown the yellow card.
Attempt missed. Rade Krunic (AC Milan) right footed shot from outside the box misses to the left. Assisted by Alexis Saelemaekers.
Attempt missed. Rafael Leão (AC Milan) right footed shot from outside the box is too high. Assisted by Simon Kjaer.
Attempt saved. Rafael Leão (AC Milan) right footed shot from outside the box is saved in the centre of the goal. Assisted by Ante Rebic.
Tanguy Ndombélé (Napoli) wins a free kick in the defensive half.
Foul by Alexis Saelemaekers (AC Milan).
Attempt missed. Mathías Olivera (Napoli) header from the centre of the box is just a bit too high. Assisted by Matteo Politano with a cross following a corner.
Corner, Napoli. Conceded by Mike Maignan.
Attempt saved. Giovanni Di Lorenzo (Napoli) right footed shot from the centre of the box is saved in the top right corner.
Stanislav Lobotka (Napoli) wins a free kick in the attacking half.