The Scotsman beat Hugo Lloris early in the second half with a low, curling effort to give Chris Hughton's side a just reward for their dominance.
Alexander Tettey and Gary Hooper missed chances to increase the lead, while Bradley Johnson smashed a free-kick against the bar, but Norwich held on thanks to their fourth consecutive home clean sheet.
Tottenham failed to score for the first time under Tim Sherwood, and find themselves six points behind fourth-placed Liverpool. Sherwood will face questions about why he kept Christian Eriksen on the bench as Spurs chased the game.
Norwich climb to 14th, fourth points clear of the relegation places.
2' - Norwich chance: Ricky van Wolfswinkel fails to connect with a looping ball six yards out with the goal at his mercy.
34' - Ricky fail: Van Wolfswinkel's frustrating afternoon continues as he hesitates when one-on-one against Michael Dawson and loses possession.
47' - GOAL: Norwich 1-0 Tottenham - Snodgrass gets in front of Danny Rose, cuts inside from the right and curls a left-foot shot into the bottom-left corner.
61' - Vital from Ruddy: The goalkeeper races out to block Emmanuel Adebayor who is running through on goal following a Sebastien Bassong error.
66' - Soldado miss: Roberto Soldado blazes wide from close range just minutes after coming off the bench. A total lack of composure from the out-of-form Spaniard.
82' - Ruddy save: Nacer Chadli gets through on goal but Ruddy stays big and makes a vital save.
84' - Johnson thunderbolt: Bradley Johnson thumps a free-kick off the underside of the bar. The ball bounces on the line and away.
This was the first time Tottenham have failed to score in the Premier League in 11 games under Tim Sherwood.
Robert Snodgrass ended a 312-minute goal drought for Norwich.
Since scoring on his debut in August, Ricky van Wolfswinkel has gone six months and 19 matches without a goal.
Where was Christian Eriksen? The second half was played out to an increasingly shrill din on social networks asking why Christian Eriksen had not replaced Nabil Bentaleb. And you can understand the consternation. A calm, creative passer was precisely what Spurs lacked, yet Eriksen stayed on the bench. Was he unfit? And if so, why was he even on the bench? Despite his strong start, many Spurs fans remain sceptical of Sherwood and Eriksen's absence magnified this doubt.
MAN OF THE MATCH
Bradley Johnson (Norwich City) - Something of an unsung hero for Norwich, Johnson provided a powerful, energetic counterpoint to a lethargic Tottenham midfield. His work rate and tackling put Spurs to shame, and he was unlucky not to score a screamer when his shot nearly snapped the bar late on.
NORWICH: Ruddy 7; Martin 8, Yobo 7, Bassong 6, Olsson 7; Tettey 7, Johnson 8, Snodgrass 7, Fer 7, Redmond 6; Van Wolfswinkel 6. Subs: Hooper 6, Hoolahan N/A
TOTTENHAM: Lloris 6; Naughton 6, Dawson 5, Vertonghen 6, Rose 6; Capoue 5, Bentaleb 4, Paulinho 6; Lennon 6, Adebayor 6, Dembele 5. Subs: Chadli 6, Soldado 4, Townsend N/A.
MATCH IN A TWEET