Playing under the lights in a foggy San Siro, Paulo Fonseca’s men got off to a quick start with Alvaro Morata in the thick of the action.
First, the Spaniard was picked out in the box but dragged his effort wide. However, he made up for that miss minutes later after Rafael Leao’s shot was deflected into the path of Morata, who swept home the opener.
Empoli struggled to get going in the first half as the hosts strolled through and doubled their lead before half-time.
The visitors failed to clear a cross and Tijjani Reijnders pounced on the loose ball to lash home and give Milan a two-goal lead going into the break.
Roberto D'Aversa made a double change ahead of the restart and the away side created their first real chance of the game on 54 minutes.
The hosts failed in their build-up from the back as Empoli pounced and Youssef Maleh rifled a shot goalwards but it cannoned off the crossbar.
The Rossoneri soon regained control and added a third goal on 69 minutes. A quick break from an Empoli attack culminated with Reijnders running from near the halfway line to the edge of the box and the Dutchman finished with aplomb.
Three goals to the good and with the result wrapped up, Fonseca took the opportunity to rest some players ahead of Milan’s Coppa Italia tie in midweek.
The Azzurri struggled to make an impact on the contest and failed to register a shot on target throughout the 90 minutes.
The result marks the Rossoneri’s first league win at home in three games, as Fonseca and his men look to move on from their early-season struggles to build on a top-four bid.