Il Milan batte un arcigno Parma e si porta al quarto posto in classifica. Aspettando la Lazio, i rossoneri di Gattuso creano e sprecano, subendo da Inglese la rete dello 0-1 al 49'. A pareggiare ci pensa Cutrone, che batte Sepe con un bel diagonale. Un quarto d'ora dopo è Kessié a segnare il rigore del 2-1, spiazzando Sepe e facendo esplodere San Siro. Nei minuti finali l'ivoriano fallisce molte occasioni, il Milan riesce però a mantenere il risultato. Rossoneri ora a venticinque, Parma fermo a venti.
Padroni di casa che scendono in campo con il 4-3-3. Gattuso lancia a sorpresa nella mischia l'ex José Mauri, affiancandolo a Kessié e Bakayoko. Davanti a Donnarumma, difesa a quattro composta da Abate, Zapata, Rodriguez e Calabria. In avanti, ai lati di Patrick Cutrone, Suso e Calhanoglou. Stessa disposizione tattica per gli ospiti, che si affidano al tridente offensivo Gervinho-Inglese-Biabiany. Sepe in porta, protetto dai centrali Bruno Alves e Bastoni e dai terzini Iacoponi e Gagliolo. In mediana spazio a Scozzarella, con Barillà e Grassi come mezzali.
Milan subito pericoloso con Patrick Cutrone, che al primo minuto conclude dal limite trovando la decisa risposta di Sepe. Il Milan gioca bene e pungola spesso il Parma. All'ottavo ci prova anche Zapata, la sua deviazione in area non trova maggior fortuna. Passano due minuti e si vede il Parma, quando è Barillà a sbagliare controllo prima di colpire in maniera pericolosa. E' l'unico tentativo ducale di tutta la prima fase di gara. Al contrario, il Milan riesce comunque a costruire gioco e a sprecare molte occasioni. Al tredicesimo bel rasoterra di Kessié fuori di poco, cinque minuti dopo bello scambio tra l'ex Atalanta e Calabria. Il terzino la mette in mezzo non trovando però nessuno. Spinge il Milan che sfrutta molto l'estro di Suso. Alla mezz'ora bella conclusione di Suso, che ubriaca Barillà e poi costringe Sepe ad una bella parata.
Meno presente nell'area avversaria, il Parma crea poco ma bene. Al 36' i ragazzi di D'Aversa sprecano infatti una grandissima occasione con Gagliolo, che sugli sviluppi di una punizione spedisce di pochissimo fuori. Anche al 45' il Parma si rende pericoloso con un tocco di Roberto Inglese da posizione ravvicinata, decisivo l'intervento di Zapata. In mezzo alle due occasioni, il Milan reclama un rigore per un contatto tra Scozzarella e Kessié in area ducale. L'arbitro Calvarese non assegna il rigore, ascoltando anche Valeri dal VAR. Il primo tempo si chiude dunque con il tentativo di Inglese, sancendo la voglia del Parma di fare punti contro un Milan che ha comunque meritato qualcosina in più.
Secondo tempo che comincia clamorosamente, con il Parma in vantaggio. Al 49' ci pensa infatti Roberto Inglese a gelare San Siro con un colpo di testa in solitaria a centro area. Sugli sviluppi di un corner l'ex Chievo Verona colpisce indisturbato, con Donnarumma praticamente impotente ed immobile. Poco male comunque per il Milan, che cinque minuti dopo pareggia grazie a Patrick Cutrone. Il giovane bomber ruba palla a centrocampo ed avvia l'azione, concludendola con un bel diagonale. Dopo il consulto del VAR per un possibile fuorigioco di Calhanoglu, lo stadio può esultare per l'1-1. Spinti dall'entusiasmo, i rossoneri riescono a spingere e a mettere alle corde il Parma.
Al 72' il Milan passa in vantaggio grazie ad un rigore di Franck Kessié. Dopo il consueto controllo del VAR per un tocco di mano di Bastoni, l'ivoriano batte Sepe dagli undici metri, spiazzando il portiere avversario e portando il risultato sul 2-1. Il Milan controlla fino a fine gara e crea qualche occasioni soprattutto con Kessié, che all'81' fallisce una clamorosa occasione. Tutto solo davanti al portiere, l'ivoriano spedisce infatti altissimo. Passano due minuti ed è Grassi a ricevere da Gagliolo e a fallire una ghiottissima occasione. Finisce così, con il Parma che non riesce a pareggiare. Milan batte Parma per due reti ad uno Migliore in campo per i padroni di casa, Cutrone. Per gli ospiti in evidenza Inglese.