The result lifted them above Lokomotiv Moscow, who had Lassana Diarra sent off as they were held to a goaless draw by Rubin Kazan on Saturday.
Last season's runners-up had not won any of their last four league matches, but relegation-threatened Ural came into the fixture with only two Premier League wins all season.
Hulk's 12th-minute opener was cancelled out by Spartak Gogniev 10 minutes after half-time, but Belgian defender Nicolas Lombaerts struck 15 minutes from the end to move Zenit to the summit.
Spartak Moscow moved to within one point of the top two thanks to a 1-0 win at Rostov on Sunday.
Abdul Waris diverted Kim Kallstrom's corner past Stipe Pletikosa in the Rostov goal to earn a win for the visitors with just two minutes remaining.
Reigning champions CSKA Moscow lost further ground in the title race due to a 1-0 loss as Krasnodar on Friday.
There was little to separate the sides in what was a very even encounter, but Artur Jedrzejczyk broke the deadlock for the hosts in the 63rd minute and it was enough to earn Krasnodar their 10th league win of the campaign.
Two goals from Germany international Kevin Kuranyi gave Dinamo Moscow a 2-0 win over visitors Amkar Perm and simultaneously moved them up to fourth, above Kuban Krasnodar and CSKA Moscow.
An 89th-minute strike from Artem Delkin secured a 2-1 away win over Volga for Krylya Sovetov, while two sides battling to avoid relegation faced each other in Sunday's final match as Terek Grozny beat nine-man Tom Tomsk 2-0.
Anzhi Makhachkala remain without a win in the league this season, with Kuban Krasnodar being the latest side to deny them as they played out a 0-0 stalemate in Dagestan.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.