Colombian striker Zapata, Uruguayan Lucas Torreira and Italian defender Gian Marco Ferrari all found the net in the second half as Sampdoria maintained their perfect home record in Genoa this season.
Juventus got two goals back in injury time with Gonzalo Higuain scoring from the spot and substitute Paolo Dybala grabbing a second just before the final whistle.
But it was too late as Juventus fell four points behind leaders Napoli -- 2-0 winners over AC Milan on Saturday.
"This was an unexpected slap in the face that really made us lose our cool," said Juventus coach Massimiliano Allegri. "We should have been patient, even if things weren't going our way. It's a long game, you have to stay calm."
Napoli have 35 points from 13 games, with Juventus on 31 and Roma third on 30 with a game in hand, after beating Lazio in a pulsating Rome derby on Saturday.
Allegri took a risk as he rested Gianluigi Buffon and Andrea Barzagli after Italy's World Cup play-off defeat with Dybala starting on the bench against a Sampdoria side who have made their home ground a fortress this season.
Sampdoria kept Juventus reined in in the first half with Zapata breaking the deadlock when he headed in after 52 minutes with Torreira firing in the second on 71 minutes and Ferrari a third eight minutes later.
Juventus were awarded a penalty after Ivan Strinic fouled Douglas Costa in the box with Higuain getting the visitors first after 91 minutes, with Dybala added the second in the final action of the game.
Juventus conceded just their second defeat of the season after Lazio, in a blow for Allegri's side as they prepare to face Barcelona in Champions League next Wednesday.