Bianconeri made three changes, as Weston McKennie returned from suspension, while Adrien Rabiot recovered from injury and Federico Chiesa was recalled, with Alvaro Morata starting from the bench.
The hosts were all over Empoli in the opening exchanges and Chiesa came close to giving them the lead in the 12th minute with a curling strike after cutting inside that produced a good save out of shot-stopper Guglielmo Vicario.
The visitors caught Juventus cold on a counter-attack in the 21st minute after Leonardo Mancuso gave them a shock lead with a strike inside the box from the rebound after a cut-back by Filippo Bandinelli on the right wing.
Aurelio Andreazzoli's charges had their tails up after that, giving Juventus a real game and stretching their defence, particularly on their right as they managed to hold on to the lead at the break.
Massimiliano Allegri made a tactical change at half-time, as Morata was eventually brought on to spearhead the attack in place of McKennie and the game continued to flow from end to end in the early stages of the second stanza, with Juventus getting the better chances but they were not clinical.
Allegri was looking for solutions from the bench with a double attacking change in the 66th minute, as Manuel Locatelli replaced Rodrigo Bentancur and Dejan Kulusevski came on for Chiesa.
The substitutions brought a new energy in attack for the Old Lady, as Locatelli came close to snatching the equaliser in the last 20 minutes with a strike inside the box that missed just wide after a cut-back by Kulusevski.
However, Empoli were frustrating the life out of Bianconeri in the dying minutes, defending with all men behind the ball and they managed to hold on to a famous win and their first points of the season while Juventus remained winless after two matches.