Paris Saint-Germain lost for the first time this season as 14th-placed Strasbourg held on for 10 minutes of second-half injury time to claim an unlikely 2-1 win in Ligue 1.

Unai Emery’s side remain 10 points clear at the top, but few would have seen a first defeat coming in Alsace since they lost 3-2 to Juventus in the International Champions Cup in July.

The Cape Verde forward Nuno da Costa opened the scoring for the home side with an unmarked header following a well-worked free-kick from Dimitri Lienard after 13 minutes.

Kylian Mbappé equalised for PSG three minutes before half-time after he turned in Adrien Rabiot’s smart cross from the left.

The home side hit back after the break through Stéphane Bahoken, who was put through by Da Costa in the 65th minute before smashing a shot into the roof of the net past Alphonse Areola’s near post.

Both sides shared six bookings in an ill-tempered second half, and PSG almost equalised in the ninth minute of added time when Presnel Kimpembe flashed a shot just over the bar.

But the home side held on for only their fourth win of the season, and put some daylight between themselves and the relegation zone.

La Liga’s leaders Barcelona were held to a 2-2 home draw by Celta Vigo as their former assistant coach Juan Carlos Unzué dented the title hopes of the Catalan club, who dropped points for the second game in a row for the first time this campaign. Celta’s striker Iago Aspas silenced the Camp Nou by giving Celta the lead in the 20th minute, knocking in on the rebound after splitting the home defence with a darting run through the middle.

Lionel Messi quickly replied, finishing off a sweeping team move two minutes later to score for the first time in six games in all competitions, with his 13th league goal of the season. Messi helped set up what looked to be the winning goal for Luis Suárez in the 62nd minute as the striker thrashed home a Jordi Alba cutback but Barça were denied victory by another Uruguayan striker in Maxi Gómez.

He slotted in from close range after another searing run by Aspas, who capitalised on Samuel Umtiti injuring a hamstring as he tried to keep up with the Spanish forward. Gerard Piqué missed a gilt-edged chance to hit the winner but struck the near post from close range, while Messi, who had also hit the woodwork earlier in the game, sent a free kick just wide deep in stoppage time.

Real Madrid failed to capitalise on their rivals’ slip up as they fought out a goalless draw at Athletic Bilbao, with Sergio Ramos setting a new La Liga record for sendings-off after gaining a second yellow card in the 86th minute to see red for the 19th time in the league, and 24th overall.

The draw leaves Zinédine Zidane’s side fourth in the table, while Bilbao climbed to 15th. Barça still lead the way with 36 points but second-placed Valencia can cut the deficit on the leaders to two if they beat Getafe on Sunday.

Kingsley Coman scored once and earned a penalty to help Bayern Munich to a 3-1 victory over Hanover 96 and open up a six-point lead at the top of the Bundesliga.

Bayern, beaten by Borussia Mönchengladbach last week for their first loss under Jupp Heynckes, moved to 32 points, with RB Leipzig stuck on 26 after crashing to a 4-0 loss at Hoffenheim.

Borussia Dortmund managed a 1-1 draw at 10-man Bayer Leverkusen and have now failed to win since late September in the league, leaving the coach Peter Bosz under pressure.

Arturo Vidal headed Bayern in front in the 17th minute and the home side thought they had scored again through Robert Lewandowski but his effort was ruled offside after a video replay.

Hanover missed the chance to level after Niclas Füllkrug’s penalty was saved by Sven Ulreich but they made amends through Charlison Benschop in the 35th.

Bayern regained control after the break with Coman drilling in from a tight angle. He forced Martin Harnik to bring him down in the box, allowing Lewandowski to grab his 14th league goal of the season with a well-taken penalty.

Leverkusen were the better side against Dortmund and hit the bar with Kai Havertz’s glancing header minutes after Dortmund’s Maximilian Philipp was carried off with a knee injury.

Kevin Volland scored for the fourth straight game for Leverkusen in the 30th minute, with Dortmund also losing Gonzalo Castro to an ankle injury after a reckless challenge from Wendell, who was sent off. Dortmund dug deep to level through Andriy Yarmolenko in the 73rd minute but despite a frantic finale they failed to get the winner and dropped to sixth on 22 points.