Liverpool, meanwhile, edge nine points clear of fifth place, but miss the chance to temporarily move up to second and take a big step towards clinching a top-four spot with two games to spare.
Liverpool boss Jurgen Klopp made five changes to his side ahead of next week's Champions League semi-final second leg in Rome, but Salah was amongst the starters and it took just six minutes for the 43-goal winger to break in behind.
It looked certain that the in-form Egyptian would break the Premier League goalscoring record for a 38-game season when he advanced into the box with only Jack Butland to beat, but to the amazement of all inside Anfield he dinked his finish wide of the target.
It looked like an ominous sign for the Potters, but they instead learned from their mistake and Liverpool found it more difficult to cut through the visitors as the half wore on.
Indeed, it was Stoke who created the next clear chance when Moritz Bauer raced clear down the left flank before picking out an unmarked Mame Biram Diouf at the back post, but the striker could only plant his header into the side-netting.
Liverpool responded with a good chance of their own just a minute later when Salah laid the ball into the path of Trent Alexander-Arnold, but the youngster - playing in an unfamiliar midfield role - could not get the ball out of his feet and eventually scuffed his finish at Butland.
An end-to-end period of the match then saw Stoke come forward again as Xherdan Shaqiri got in behind the defence before playing a low ball across the area which was just too far in front of Peter Crouch.
A mistake from Butland 11 minutes before half time almost handed Salah a chance to atone for his earlier miss, but Liverpool were ultimately forced to settle for a free kick which the winger curled into the side-netting of the near post.
It was a much flatter performance from the hosts than they produced just four days ago against Roma, but they did have the ball in the back of the net with four minutes remaining of the first half when Danny Ings squeezed a volley in from an acute angle, only for the offside flag to cut his celebrations short.
Salah, who had been well-marshalled by Erik Pieters since missing his early chance, found himself in some rare space five minutes into the second half when a corner was only cleared as far as him on the edge of the box, but he fired his effort well off target.
Klopp eventually turned to his bench in an attempt to inject some much-needed intensity into his side's performance as James Milner and Nathaniel Clyne were introduced, and the latter almost made an immediate impact when he ghosted into the area unmarked, only to put a tame header straight at Butland.
Alberto Moreno was the next to try his luck after finding himself in space outside the area, but his low long-range effort zipped a couple of yards wide of the far post.
It wasn't until the very closing stages that the second half really came to life, and Liverpool were left furious with the officials when they were denied a penalty after Wijnaldum's cross struck Pieters's hand inside the area with only three minutes of normal time remaining.
The hosts' anger was almost compounded just a minute later when Stoke nearly ended their 54-game wait for a top-flight win at Anfield in smash-and-grab fashion, with Diouf looping an effort towards the far corner which Shawcross almost turned in at the back post.
It was a major scare for Liverpool, but they couldn't make the most of the let-off in six minutes of added time as Jordan Henderson and Wijnaldum both put half-chances off target.
The result stretches Liverpool's unbeaten run to nine matches across all competitions, but it was a lacklustre display heading into a week which sees them take on Roma and Chelsea, the latter of whom are now the only team that can deny them Champions League football again next season.
Stoke, meanwhile, will now go into their final two matches against fellow strugglers Crystal Palace and Swansea City with renewed hope of pulling off a great escape despite seeing their winless run stretch to 12 games.
LIVERPOOL (4-3-3): Karius; Gomez, Van Dijk, Klavan, Moreno; Alexander-Arnold (Milner 65'), Henderson, Wijnaldum; Salah, Firmino, Ings (Clyne 85')
STOKE (4-4-2): Zouma, Shawcross, Martins Indi (Sobhi 52'), Pieters; Shaqiri, Allen, N'Diaye, Bauer; Diouf, Crouch (Fletcher 65')