Match ends, Doncaster Rovers 0, Shrewsbury Town 1.
Shaun Whalley scored a freak second-half winner straight from a corner to stretch Shrewsbury's unbeaten League One run to five games at Doncaster.
Rovers were by far the better side in the first half but could not make their pressure count as they failed to score for the third time in four games.
They were made to pay on 63 minutes when Town wide man Whalley's inswinging corner flew in at the near post.
His second goal in successive games leaves Rovers without a win in 10.
Visiting keeper Jayson Leutwiler was Shrewsbury's star man with a string of saves, capped by a magnificent effort to tip away Cameron Stewart's injury-time free-kick. And, when he was beaten, Andy Butler had a header cleared off the line by Ian Black.
Shrewsbury Town boss Micky Mellon told BBC Radio Shropshire:
"It's a massive victory. The questions the lads have been asked were answered with three points.
"It's a vitally important goal. This is what you get at this time of the season and it's always good to get clean sheets.
"I am delighted with our performance. We needed the energy and enthusiasm of the whole squad to get a result. We had desire and commitment."
- 20Taylor-SinclairSubstituted forEvinaat 76'minutes
- 37CalderSubstituted forStewartat 84'minutes
- 21MandevilleSubstituted forWilliamsat 61'minutes
- 1LeutwilerBooked at 90mins
- 4WhitbreadSubstituted forSmithat 27'minutes
- 20Knight-PercivalBooked at 19mins
- 12BrownBooked at 57mins
- 6BlackSubstituted forWellensat 75'minutes
- 19ManganSubstituted forKaikaiat 64'minutes
- Phil Gibbs
- Shots on Target
Second Half ends, Doncaster Rovers 0, Shrewsbury Town 1.
Jayson Leutwiler (Shrewsbury Town) is shown the yellow card.
Corner, Doncaster Rovers. Conceded by Richard Wellens.
Corner, Shrewsbury Town.
Corner, Doncaster Rovers. Conceded by Jayson Leutwiler.
Attempt saved. Cameron Stewart (Doncaster Rovers) right footed shot from outside the box is saved in the top right corner.
Cameron Stewart (Doncaster Rovers) wins a free kick in the defensive half.
Foul by Richard Wellens (Shrewsbury Town).
Attempt missed. Nathaniel Knight-Percival (Shrewsbury Town) header from very close range is close, but misses to the right following a corner.
Corner, Shrewsbury Town. Conceded by Cedric Evina.
Substitution, Doncaster Rovers. Cameron Stewart replaces Riccardo Calder.
Foul by Andy Williams (Doncaster Rovers).
Dominic Smith (Shrewsbury Town) wins a free kick on the right wing.
Attempt saved. Riccardo Calder (Doncaster Rovers) right footed shot from outside the box is saved in the centre of the goal.
Attempt missed. Andy Williams (Doncaster Rovers) header from very close range is just a bit too high following a corner.
Corner, Doncaster Rovers. Conceded by Junior Brown.
Corner, Shrewsbury Town. Conceded by Craig Alcock.
Substitution, Doncaster Rovers. Cedric Evina replaces Aaron Taylor-Sinclair.
Substitution, Shrewsbury Town. Richard Wellens replaces Ian Black.