Robert Huth and Cameron Jerome struck second-half goals to give Stoke their first win in 2013 and end Reading's resurgence at the Britannia Stadium.
Adrian Mariappa scored but Reading were unable to find another late recovery as Stoke hung on to leave the Royals just above the relegation zone.
Huth headed in off the underside of the crossbar, before substitute Jerome smashed in a second on the turn.
Royals supersub Adam Le Fondre then saw a late penalty appeal turned down.
Brian McDermott's side had taken points from their last four Premier League games with late goals but Premier League player of the month Le Fondre's only impact saw him go down in the box under a challenge from Ryan Shotton in injury time.
Referee Michael Oliver waved the protests away and Stoke claimed a fully-deserved three points.
The Potters dominated possession with winger Matthew Etherington picking out Peter Crouch with a couple of early crosses. But the striker's radar was way out as he failed to get a header on target.
"Stoke's first victory since Boxing Day was hard-won against an obdurate Reading side. Huth and Jerome looked to have made it safe for the Potters, Adrian Mariappa got one back, but there was to be no repeat of the late, late show for the Royals."
Stoke cranked up the pressure just before the break, forcing five corners in the space of two minutes as Reading were desperately hanging on for the half-time whistle.
Adam Federici tipped away Ryan Shawcross's flick and was at full stretch to keep out Crouch's far post volley.
When the Australian keeper was finally beaten by Huth's low shot from the edge of the box, Stephen Kelly scrambled his effort just wide.
But Reading's resistance of the aerial bombardment was finally breached midway through the second half.
Glenn Whelan's inswinging corner was met by Huth, who rose above three Reading defenders at the far post, to crash in a header off the woodwork.
The goal lifted the tension around the stadium just as it was looking like Stoke, who went into the game with just one win in 10 Premier League games, could be denied again.
And the second arrived 14 minutes later when Mariappa failed to deal with Huth's long ball. The defender's mistimed header dropped for Jerome, who used his strength to hold off Alex Pearce, before turning and driving in a fierce strike giving Federici no chance.
Mariappa soon scored from a corner at the other end but Le Fondre could not summon up another late goal as the Royals lost in the league for the first time since New Year's Day.
There were 107 aerial duels in this match (50-50 challenges in the air) - 34 more than in any other Premier League game this season.
Stoke manager Tony Pulis:
"We're pleased because I think we deserved to win the game. I've not seen the penalty (claim) but if we had not taken the points I'd have been disappointed because I thought we deserved it.
"We should have come in at half-time winning the game. We got stronger and stronger as the game went on.
"The disappointing thing is we've conceded from a set -lay because I don't think Asmir Begovic has had anything to do until he's picking the ball out of the back of the net."
Reading manager Brian McDermott:
"Most people would say it was a stonewall penalty. It's a very unfortunate that (the referee) has decided not to give that. In my opinion it's a penalty but he's had one look at it and not given it.
"I thought we would get at least a point but they don't lose many games here."
- 01 Begovic
- 04 Huth
- 17 Shawcross
- 28 Wilkinson (Cameron - 85' Booked )
- 30 Shotton
- 06 Whelan Booked
- 15 Nzonzi
- 21 Kightly (Jerome - 65' )
- 26 Etherington
- 19 Walters
- 25 Crouch (Jones - 65' )
- 29 Sorensen
- 02 Cameron
- 16 Adam
- 18 Whitehead
- 09 Jones
- 10 Owen
- 33 Jerome
- 01 Federici
- 05 Pearce
- 06 Mariappa
- 23 Harte
- 27 Kelly
- 08 Leigertwood
- 11 McAnuff (McCleary - 74' )
- 14 Kebe
- 28 Akpan
- 07 Pogrebnyak (Hunt - 80' )
- 30 Blackman (Le Fondre - 56' )
- 41 Taylor
- 03 Shorey
- 15 Morrison
- 04 Karacan
- 09 Le Fondre
- 10 Hunt
- 12 McCleary
Live Text Commentary
Full Time The referee ends the match.90:00 +2:07
Unfair challenge on Steven Nzonzi by Adam Le Fondre results in a free kick. Asmir Begovic takes the direct free kick.90:00 +0:47
The free kick is delivered left-footed by Ian Harte from right by-line.90:00 +0:47 Booking
Booking The referee books Geoff Cameron for unsporting behaviour.90:00 +0:36
Free kick awarded for an unfair challenge on Jimmy Kebe by Geoff Cameron.86:08
Ian Harte takes the inswinging corner, Glenn Whelan manages to make a clearance.85:38
Free kick awarded for an unfair challenge on Adam Le Fondre by Glenn Whelan. Free kick taken by Ian Harte.85:18
Glenn Whelan takes a shot. Save by Adam Federici.84:43 Substitution
Substitution Geoff Cameron on for Andy Wilkinson.82:40
Assist by Ian Harte.82:40 Goal scored
Goal! - Adrian Mariappa - Stoke 2 - 1 Reading Adrian Mariappa finds the net with a headed goal from close range. Stoke 2-1 Reading.82:15
Corner taken left-footed by Ian Harte to the near post,80:17
Assist by Ryan Shawcross.80:17 Goal scored
Goal! - Cameron Jerome - Stoke 2 - 0 Reading Cameron Jerome grabs a goal from inside the area to the bottom left corner of the goal. Stoke 2-0 Reading.79:28 Substitution
Substitution Pavel Pogrebnyak leaves the field to be replaced by Noel Hunt.77:47
Inswinging corner taken right-footed by Glenn Whelan from the left by-line, clearance by Ian Harte.76:34
Steven Nzonzi takes a shot. Adam Federici makes a comfortable save.75:23
Handball by Pavel Pogrebnyak. Asmir Begovic restarts play with the free kick.74:37
Shot by Ian Harte. Blocked by Alex Pearce.72:49
Direct free kick taken by Adrian Mariappa.
Substitution Garath McCleary comes on in place of Jobi McAnuff.72:49 Booking
Booking Glenn Whelan goes into the referee's book for unsporting behaviour.72:23
Free kick awarded for a foul by Glenn Whelan on Mikele Leigertwood.70:26
Effort on goal by Matthew Etherington from outside the area goes harmlessly over the bar.69:28
Robert Huth concedes a free kick for a foul on Adam Le Fondre. Shot on goal comes in from Ian Harte from the free kick.66:55
Assist on the goal came from Glenn Whelan.66:55 Goal scored
Goal! - Robert Huth - Stoke 1 - 0 Reading Robert Huth finds the back of the net with a headed goal from inside the area. Stoke 1-0 Reading.66:29
Jonathan Walters takes a shot. Blocked by Alex Pearce. Inswinging corner taken right-footed by Glenn Whelan from the left by-line,66:00
Hope Akpan gives away a free kick for an unfair challenge on Kenwyne Jones. Ryan Shawcross restarts play with the free kick.64:40 Substitution
Substitution Kenwyne Jones on for Peter Crouch.64:40 Substitution
Substitution Michael Kightly leaves the field to be replaced by Cameron Jerome.63:59
Shot from 20 yards by Hope Akpan. Save made by Adam Federici.63:27
Corner taken by Ian Harte played to the near post, clearance by Steven Nzonzi.57:46
Corner taken right-footed by Glenn Whelan from the left by-line, Mikele Leigertwood makes a clearance.55:55 Substitution
Substitution Adam Le Fondre replaces Nick Blackman.52:15
Pavel Pogrebnyak is flagged offside by the assistant referee. Free kick taken by Asmir Begovic.45:01
The game restarts for the second half.45:00 +1:28 Half time
Half Time The match has reached half-time.44:25
Unfair challenge on Ian Harte by Peter Crouch results in a free kick. Free kick taken by Ian Harte.39:13
Effort from 12 yards by Peter Crouch. Adam Federici makes a save. Corner taken left-footed by Matthew Etherington to the near post, clearance made by Adrian Mariappa. Matthew Etherington takes the inswinging corner, Corner taken by Matthew Etherington played to the near post. Alex Pearce makes a clearance. Inswinging corner taken by Matthew Etherington from the right by-line played to the near post, Corner taken by Matthew Etherington played to the near post, Ian Harte manages to make a clearance. Robert Huth takes a shot. Alex Pearce gets a block in.38:13
Ryan Shotton fouled by Pavel Pogrebnyak, the ref awards a free kick. Free kick taken by Asmir Begovic.37:01
Peter Crouch has an effort at goal from just outside the box which goes wide of the right-hand post.32:24
Matthew Etherington takes a inswinging corner to the near post, Adam Federici makes a save. Ryan Shawcross takes a shot. Save by Adam Federici. Matthew Etherington takes the inswinging corner, Alex Pearce makes a clearance.31:09
Jonathan Walters takes a shot. Save made by Adam Federici.25:56
Shot from 12 yards by Michael Kightly. Blocked by Adrian Mariappa.25:26
The assistant referee flags for offside against Pavel Pogrebnyak. Free kick taken by Ryan Shawcross.22:59
Steven Nzonzi gives away a free kick for an unfair challenge on Pavel Pogrebnyak. Alex Pearce restarts play with the free kick.22:13
Adrian Mariappa challenges Peter Crouch unfairly and gives away a free kick. Glenn Whelan restarts play with the free kick.21:33
Michael Kightly is penalised for a handball. Free kick taken by Adam Federici.20:44
Effort from outside the box by Mikele Leigertwood goes wide right of the target.10:56
Peter Crouch concedes a free kick for a foul on Adrian Mariappa. Adam Federici restarts play with the free kick.8:14
The ball is sent over by Matthew Etherington, Peter Crouch has a headed effort at goal from deep inside the area missing to the left of the target.2:43
Matthew Etherington takes a inswinging corner from the right by-line played to the near post.0:00
The game begins.
Live data and text provided by our data suppliers