Swansea 3 - 0 Norwich
Goals from Fabio Borini, Mark Gower and Tamas Priskin threw the automatic promotion race wide open as Swansea beat second-place Norwich.
Italian Borini set the ball rolling with a superbly-struck 30-yard free-kick into the top corner.
Gower drilled home from the edge of the box to double the lead, before Priskin sealed the win in injury-time.
Norwich had chances through Grant Holt and Simeon Jackson but Swans keeper Dorus de Vries was in fine form.
Swansea stay fourth, level on 69 points and goal difference with Cardiff City but the two Welsh sides are now just a point off Norwich, who saw their nine-match unbeaten run come to an end.
The Swans knew only a win would do if they were to realistically keep their automatic promotion hopes alive.
Having already taken promotion rivals Leeds and Nottingham Forest to task on home soil, Norwich were their next targets, but the Canaries have been scoring goals for fun.
It was therefore no surprise that Norwich took the game to Swansea and goalkeeper De Vries had to make a fine double-save to keep them out after just four minutes.
The first came when Dani Pacheco was allowed to skip into the box and fire at goal and De Vries' parry fell into the path of Holt, but the alert Dutchman denied him too.
Then within a minute, Norwich were made to pay when Zak Whitbread hacked down Borini 30 yards out and the Italian Under-21 international picked himself up to superbly send the resulting free-kick into the top left-hand corner for his third goal in as many games.
Top-scorer Holt posed the visitors' biggest threat and he was involved in most of their moves as they tried to level.
The Canaries captain was on the end of a neat build-up around the Swansea box before dragging his shot across the face of goal.
And midway through the first half, Andrew Crofts floated in a delightful ball from the right-hand byline which Holt met at the far post only to head into the side-netting.
Once again, Paul Lambert's side were left to rue missed opportunities as the Swans went on to double their lead on 29 minutes.
Right-back Angel Rangel raced into the box before launching a shot at John Ruddy, who could only parry.
Norwich failed to clear their lines leaving Gower to drill a sweetly struck half-volley into the bottom corner from just outside the box.
It could have been 3-0 had it not been for the quick reaction by Ruddy to close down Borini after being put through on goal by Nathan Dyer.
And then in first-half stoppage time, Whitbread came to Norwich's rescue with a superbly-timed challenge in the box to clear the danger from Borini.
Norwich threw on Jackson at the restart for Andrew Surman and almost got themselves back into the game within a minute.
Holt won a free-kick and was on the end of Pacheco's delivery but somehow powered his six-yard header wide.
And then just before the hour, Crofts collected the ball on the edge of the box and drilled inches wide of the upright, before later hitting a tame shot straight at De Vries.
That was Crofts' last action as he was brought off for Korey Smith while Sam Vokes replaced Pacheco and Lambert pushed three up front.
De Vries repeated his first-half double save on 71 minutes when he pushed away two fine strikes from Smith.
Swans substitute Priskin wasted one chance to put the game to bed by firing straight at Ruddy.
But the on-loan Ipswich striker made amends by pouncing on a weak Whitbread backpass to beat Ruddy to the loose ball, leaving him with the simplest of tasks to roll the ball into an empty net.
Live Text Commentary
Full Time The referee ends the match.90:00 +3:32
The assist for the goal came from Ashley Williams.90:00 +3:31 Goal scored
Goal! - Tamas Priskin - Swansea 3 - 0 Norwich Tamas Priskin gets on the score sheet with a goal from inside the penalty area to the bottom right corner of the goal. Swansea 3-0 Norwich.90:00 +0:33
Grant Holt concedes a free kick for a foul on Mark Gower. Direct free kick taken by Dorus De Vries.89:14
Henri Lansbury concedes a free kick for a foul on Tamas Priskin. Mark Gower takes the free kick.87:36
Mark Gower takes a short corner.85:22
Tamas Priskin produces a right-footed shot from the edge of the box and misses to the right of the target.82:33
Unfair challenge on Joe Allen by Henri Lansbury results in a free kick. Garry Monk restarts play with the free kick.81:46
Elliott Ward is adjudged to have handled the ball. Shot on goal comes in from Mark Gower from the free kick, save by John Ruddy.81:14
Free kick awarded for a foul by Elliott Ward on Tamas Priskin. Dorus De Vries takes the direct free kick.78:22 Substitution
Substitution Alan Tate comes on in place of Nathan Dyer.78:22 Substitution
Substitution Leon Britton comes on in place of Fabio Borini.76:21
Short corner taken by Mark Gower. Angel Rangel takes a shot. Henri Lansbury gets a block in. Inswinging corner taken by Mark Gower from the left by-line played to the near post, clearance made by Russell Martin.76:10
Effort on goal by Tamas Priskin from 30 yards. John Ruddy makes a save.74:54
Shot by Simeon Jackson from just outside the area goes over the net.74:12
Corner taken by David Fox from the right by-line.74:04
Sam Vokes takes a shot. Blocked by Ashley Williams.71:40
Korey Smith takes a shot. Save by Dorus De Vries.71:26
Korey Smith takes a shot. Save by Dorus De Vries.68:33
Shot from 18 yards from Scott Sinclair. Save by John Ruddy.
Free kick awarded for an unfair challenge on Marc Tierney by Nathan Dyer. John Ruddy takes the free kick.64:01 Substitution
Substitution Andrew Crofts goes off and Korey Smith comes on.64:01 Substitution
Substitution Sam Vokes on for Daniel Pacheco.62:36
Andrew Crofts has a curled shot. Comfortable save by Dorus De Vries.59:38
Simeon Jackson fouled by Joe Allen, the ref awards a free kick. Direct free kick taken by Russell Martin.58:24
Tamas Priskin takes a shot. Comfortable save by John Ruddy.57:20 Substitution
Substitution Stephen Dobbie goes off and Tamas Priskin comes on.56:57
Inswinging corner taken right-footed by Daniel Pacheco from the left by-line to the near post, Fabio Borini manages to make a clearance.56:05
Andrew Crofts has an effort at goal from outside the box missing to the wide left of the goal.54:29
Mark Gower concedes a free kick for a foul on Simeon Jackson. David Fox restarts play with the free kick.50:30
Shot from just outside the box by Nathan Dyer goes over the bar.50:03
Corner taken by Mark Gower from the left by-line to the near post, Henri Lansbury makes a clearance.49:33
Nathan Dyer fouled by Marc Tierney, the ref awards a free kick. The free kick is swung in right-footed by Mark Gower, Zak Whitbread manages to make a clearance.49:33 Booking
Booking Booking for Marc Tierney for unsporting behaviour.48:02
Henri Lansbury takes a shot. Garry Monk gets a block in. Inswinging corner taken right-footed by David Fox played to the near post, Andrew Crofts takes a shot. Grant Holt gets a block in.45:16
Foul by Garry Monk on Grant Holt, free kick awarded. Daniel Pacheco sends in a cross, Close range headed effort by Grant Holt goes wide of the left-hand upright.45:01
The second half has started.45:01 Substitution
Substitution Simeon Jackson on for Andrew Surman.45:00 +1:28 Half time
Half Time The players leave the pitch at half time.43:59
Outswinging corner taken by Andrew Surman.40:50
Fabio Borini takes a shot. Save made by John Ruddy.34:55
Mark Gower crosses the ball.34:30
Short corner taken by Mark Gower.33:33
Scott Sinclair takes a shot. Zak Whitbread gets a block in. Corner taken by Mark Gower from the right by-line.32:52
Nathan Dyer takes a shot from 20 yards. Blocked by Marc Tierney.32:14
Free kick awarded for a foul by Henri Lansbury on Ashley Williams. Dorus De Vries takes the free kick.30:55
Mark Gower takes the inswinging corner, Fabio Borini has an effort at goal from deep inside the area missing to the left of the goal.28:17
Angel Rangel takes a shot. Save by John Ruddy.28:17 Goal scored
Goal! - Mark Gower - Swansea 2 - 0 Norwich Mark Gower gets on the score sheet with a goal from just outside the area to the bottom right corner of the goal. Swansea 2-0 Norwich.24:49
Outswinging corner taken by Mark Gower, Header from deep inside the area by Ashley Williams goes over the bar.23:10
Headed effort from close range by Grant Holt goes wide left of the target.22:02
Inswinging corner taken by Mark Gower, clearance made by Marc Tierney.19:59
Grant Holt produces a left-footed shot from deep inside the penalty area which goes wide of the right-hand post.19:25
Andrew Surman takes a shot. Garry Monk gets a block in.16:13
Elliott Ward gives away a free kick for an unfair challenge on Scott Sinclair. Mark Gower delivers the ball, Angel Rangel has a headed effort from close range and clears the crossbar.16:13 Booking
Booking Booking for Elliott Ward for unsporting behaviour.14:15
Shot by Stephen Dobbie from just outside the area goes over the net.12:33
Andrew Surman is penalised for a handball. Indirect free kick taken by Dorus De Vries.9:33
Grant Holt takes a shot. Dorus De Vries makes a save.7:26
Fabio Borini takes a shot. Zak Whitbread gets a block in.4:52
Free kick awarded for a foul by Elliott Ward on Joe Allen. Assist on the goal came from Joe Allen.4:52 Goal scored
Goal! - Fabio Borini - Swansea 1 - 0 Norwich Fabio Borini fires in a goal from outside the area to the top left corner of the goal. Swansea 1-0 Norwich.3:11
Daniel Pacheco takes a shot. Save made by Dorus De Vries. Grant Holt takes a shot. Save made by Dorus De Vries.1:01
Stephen Dobbie takes a shot. Blocked by Elliott Ward.0:00
The referee starts the match.
Live data and text provided by our data suppliers