Wednesday's other three matches, Slovan Bratislava-BATE Borisov, Maribor-Celtic and Aalborg-APOEL Nicosia, all ended in 1-1 draws.
The Portuguese player chested the ball down for Hulk and the Brazilian picked out Shatov who side-footed home from near the penalty spot.
Danny and Jose Rondon both struck the woodwork in a dominant Zenit performance Porto, who have only missed out on the group stage four times since it started in 1992, took control of their tie when Mexico forward Herrera stabbed in from close range in the 61st minute after Vincent Enyeama had parried Jackson Martinez's header.
"We played a very serious game, against very serious and difficult opponents," said Porto coach Julen Lopetegui. "We had more than enough chances to guarantee the result and now we have to continue working to make sure of a game result in the second leg."
Slovan Bratislava gifted BATE the lead just before halftime when defender Thomas Jablonsky turned Sergei Krivets' looping cross past his own goalkeeper.
Robert Vittek grabbed a superbly taken equaliser for the Slovakian champions, who have never qualified for the group stage, with 10 minutes to play.
Aalborg dominated the first-half against APOEL and took a deserved lead when Nicolaj Thomsen side-footed home from the edge of the area, but Brazilian Vinicius scored from the Cypriot side's only real attack nine minutes after the break.
- Sports & Recreation
- Hector Herrera
- Standard Liege
- Oleg Shatov
- Domenico Criscito