Last year’s runners-up Liverpool knew victory by two goals or a 1-0 triumph would put them through to the last 16 from Group C, and Salah’s cool 34th-minute finish proved enough as they finished ahead of Napoli on goals scored.
Paris Saint-Germain reached the knockout stage as group winners thanks to a 4-1 victory over Red Star Belgrade, with Neymar, Kylian Mbappe and Edinson Cavani all on the scoresheet.
Jurgen Klopp’s Liverpool grabbed the crucial goal at a raucous Anfield, as Salah jinked past Kalidou Koulibaly inside the area and slotted the ball beyond goalkeeper David Ospina.
Salah, who had already wasted an earlier chance with a heavy touch, continued to run Napoli ragged early in the second half, but Ospina saved from Jordan Henderson and James Milner curled wide as Carlo Ancelotti’s men stayed a goal from turning the group on its head.
The atmosphere around Anfield became increasingly tense as the Premier League leaders continued to miss opportunities, with Ospina springing to his left to tip away Salah’s attempted lob before denying Mane from point-blank range.
Senegal forward Mane was guilty of two further snatched efforts in front of goal, and Napoli almost made the Reds pay in the dying moments.
The ball fell for substitute striker Arkadiusz Milik unmarked in the area, but Alisson raced from his line to keep out the Pole’s strike with his legs.
PSG went into their match in Belgrade knowing that victory would send them through, and Edinson Cavani gave them the perfect start by tapping in after an excellent run and pass by Kylian Mbappe.
Neymar’s strike five minutes before half-time appeared to have put the game to bed, but Red Star, who had already beaten Liverpool and held Napoli in Serbia earlier in the campaign, pulled one back before the hour mark through Marko Gobeljic.
But the French champions finally sealed their spot in the knockout rounds as Marquinhos headed in Angel Di Maria’s free-kick with 16 minutes to go and Mbappe added further gloss to the scoreline in added time.
Spurs come back from the brink
Spurs went into their final Group B game at the Camp Nou needing to match Inter Milan’s result against PSV Eindhoven in Italy, but Mauricio Pochettino’s side fell behind in only the seventh minute as Ousmane Dembele scored a wonderful individual goal.
But Hirving Lozano gave PSV a shock early advantage at the San Siro to leave Tottenham heading through as it stood.
The English club had plenty of half-chances against a much-changed Barca, who had already won the group, but Philippe Coutinho almost made it 2-0 when his low shot struck the post.
Mauro Icardi levelled for Inter against PSV with 17 minutes left to leave Spurs needing to score at least once.
Tottenham, who were facing an early elimination when trailing PSV in their fourth group match before rallying to win and then beating Inter, continued to push and Moura met Harry Kane’s low cross in the 85th minute to cap a dramatic group-stage revival.
Borussia Dortmund snatched top spot in Group A with a 2-0 win over rock-bottom Monaco, as Atletico Madrid were held to a goalless draw at Club Brugge.
Raphael Guerreiro tapped in Maximilian Philipp’s low cross in the 15th minute against Thierry Henry’s crisis-hit Monaco, before slamming in a second late on.
Earlier on Tuesday in Group D, Galatasaray secured a Europa League last 32 place despite losing 3-2 to Porto in an entertaining game which saw two of three penalties scored.
Lokomotiv Moscow were beaten 1-0 by Schalke in Gelsenkirchen, leaving the Russian champions rooted to the foot of the Group D table.