Il rallentamento delle prime della classe è un'occasione ghiotta per la Roma per tentare di ridurre il gap sulla zona Champions, il Milan invece arriva all'Olimpico con la necessità di fare punti per non ritrovarsi invischiato in scomode posizioni di classifica.
La lunghissima lista di indisponibili costringe Fonseca a confermare Mancini in mezzo al campo, resta fuori Florenzi, c'è Spinazzola sull'out di destra con Pastore sulla trequarti. Pioli sceglie Conti e non Calabria in difesa, Suso e Leao vincono rispettivamente i due ballottaggi in attacco su Rebic e Piatek, Paqueta trova ancora spazio.
Parte meglio il Milan, al 12' Leao spreca una buona occasione tirando a lato anziché metterla in mezzo per il solissimo Hernandez. Da qui a fine primo tempo occasioni solo di marca giallorossa. Pericoloso in un paio di occasioni Pastore, sempre su regia di Perotti, ma l'ex Psg non trova la via del gol per imprecisione prima, per la prontezza di Donnarumma dopo. Il risultato si sblocca al 38': a seguito di un corner conquistato da Zaniolo, Dzeko, dopo una spizzata a centro area, la devia di testa sotto la traversa. Si va dunque al riposo sull'1-0.
In avvio di ripresa arriva subito il pareggio: Calabria, entrato per Conti, mette dentro, Hernandez controlla e tira, la deviazione di Smalling mette fuori causa Pau Lopez. Dura poco l'equilibrio: disattenzione clamorosa sempre di Calabria, la difesa rossonera si fa infilare, per Zaniolo è facile controllare e spiazzare Donnarumma siglando così il 2-1. Due le occasioni per il tris capitolino, ma prima Mancini e poi ancora Zaniolo non trovano di poco la via del gol. All'88' è Calhanoglu che cerca la via della rete, ma la sua conclusione trova solo l'esterno della porta giallorossa. Il risultato non cambia fino al fischio finale.
Tre punti che lanciano così la Roma ad una sola lunghezza dal Napoli, attualmente quarto in classifica, per il Milan invece è notte fonda, ennesima serataccia per il popolo rossonero.