After a drab first half, substitute Charlie Adam gave Stoke the lead in the 51st minute from Crouch's knockdown.
It was cancelled out 15 minutes later as Libor Kozak pounced on a horrible mistake from Erik Pieters but the Dutchman's blushes were spared when Crouch restored Stoke's lead in the 70th minute.
That was the way it stayed as Mark Hughes' side secured back-to-back home wins in the Barclays Premier League and climbed above Villa into the top half of the table.
Visiting boss Paul Lambert chose to leave struggling striker Christian Benteke out of his squad but Stoke were boosted by the presence in their side of captain Ryan Shawcross, who had been very doubtful with a groin problem.
Shawcross and his fellow defenders had to be alert as Villa began brightly, creating the first chance 10 minutes in when Ashley Westwood's cross was headed goalwards by Nathan Baker.
Asmir Begovic grasped it at the second attempt, and the Stoke keeper was also behind Aleksander Tonev's volley from the edge of the box.
Marc Albrighton was the first man in the book in the 21st minute, the Villa winger reacting to a push from Pieters with a rash challenge on the full-back.
There did not appear to be any real contact but the intent was enough for referee Craig Pawson to show a yellow card.
Five minutes later Marc Wilson picked up a booking, although Villa thought it should have been red.
The defender's poor touch just outside the area let in Andreas Weimann, who was then brought down by Wilson.
The Stoke player was definitely the last man but Weimann's touch meant Begovic was a clear favourite to get to the ball first.
Stoke had offered little of note in attack but they very nearly took the lead in the 37th minute through Geoff Cameron.
The full-back sprinted down the right and sent over a cross that would have dropped into the net but for a fine save from Brad Guzan.
The hosts finished the half strongly and with three minutes left Ossama Assaidi jinked his way down the left and sent over a cross that would have been turned in by Crouch but for a superb block by Ciaran Clark.
The rebound fell to Marko Arnautovic but he was denied by another block, this time from Baker.
Arnautovic was the man to make way as Adam came on for the start of the second half, and it took the playmaker only six minutes to break the deadlock.
Clark was shown a yellow card for a crude foul on Jonathan Walters and Cameron's free-kick was headed on by Crouch to Adam, who took the ball on his chest, turned past Baker and placed his shot beyond Guzan.
Referee Pawson was a busy man as tempers flared following a rash challenge from Fabian Delph on Crouch.
The midfielder was shown a yellow card, and was slightly fortunate to escape a second booking in a minute when he brought down Adam on the edge of the box, although Chris Herd did talk his way into the book.
The equaliser came out of nothing in the 66th minute as Guzan pumped a long ball forward.
Stoke looked to have dealt with it but Pieters tried to head the ball back to Begovic and only succeeded in setting up Kozak, who could not miss.
But Villa were level for only four minutes before Crouch restored Stoke's lead.
Glenn Whelan found the impressive Cameron down the right, and when Guzan and Herd tried to cut out his cross, the ball fell to Crouch in front of an empty net.
There was a suspicion of handball about the striker's first touch but the Villa complaints were half-hearted.
Crouch almost added a third three minutes later with a flick from Pieters' header that hit a post, while at the other end Kozak's stinging shot was acrobatically tipped over the bar by Begovic.