Artem Dzyuba continued his impressive goalscoring form as he put Zenit ahead after just three minutes at the Stadion Petrovskiy.
Lyon pulled level shortly after half-time through Alexandre Lacazette but Hulk drilled home a trademark long-range strike to restore the lead for Zenit.
Danny then ended any hopes of a Lyon comeback on 83 minutes as Andre Villas-Boas’s men registered a third win in as many attempts to strengthen their position at the top of the group.
“It’s a fantastic win. It was a really difficult match against Lyon and I’m pleased,” said Zenit coach Villas-Boas.
“Next time out we’ll go to Lyon and it will be a decisive match as much for us as for them.”
He added: “In the league we’ve made mistakes as a team which have led to us conceding goals and dropping points. In the Champions League, we haven’t made these same errors. That’s the difference.”
Zenit are three points clear of second-placed Valencia who beat Gent 2-1 in the night’s other game to leave both defeated sides, Lyon and Gent, on one point apiece with their European dreams fading fast.
Lyon were caught cold on a chilly night in St Petersburg as the hosts secured an early breakthrough when Oleg Shatov played in Dzyuba to coolly steer beyond Lyon goalkeeper Anthony Lopes for his sixth goal in his last seven appearances for club and country.
Mapou Yanga-Mbiwa stung the palms of Zenit keeper Mikhail Kerzhakov with a snap volley but the home side should have increased their lead when Hulk found Dzyuba in acres of space inside the box, only for the Russia striker to slip as he pulled the trigger.
Having conceded possession for the Zenit opener, it was from right-back Christophe Jallet’s low cross that Lyon restored parity as Lacazette cleverly flicked the ball past Kerzhakov four minutes into the second half.
However, Lyon were made to pay a heavy price seven minutes later after Hulk shrugged off a couple of challenges before taking aim from distance and beating Lopes with a vicious swerving effort.
Dzyuba wasted a chance to add to his tally after prodding wide on 67 minutes but Zenit skipper Danny ensured the Russians achieved a hat-trick of wins to start a group stage campaign for the first time as Shatov raced clear before squaring for the Portuguese to tap in.
Follow us on Twitter @NatSportUAE