Zito (4-2) shook off a disastrous previous start against Milwaukee -- in which gave up eight runs over three full innings. The left-hander this time allowed only a pair of runs on seven hits, walking one and striking out three.
Clay Hensley tossed a scoreless eighth and Santiago Casilla notched his 13th save despite allowing two hits in the ninth for the Giants, who took the opener of a three-game series.
Gregor Blanco stole home to ignite the early three-run outburst, during which Hector Sanchez drove in Angel Pagan with a single and then scored on a triple by Brandon Belt.
Blanco added an insurance run with an RBI double in the fourth.
Trevor Cahill (2-5) stretched his winless streak to five consecutive starts for Arizona, allowing four runs on eight hits over six frames.
John McDonald hit a pinch-hit solo homer for the Diamondbacks.