Real Madrid suffered a shock 2-0 loss and finished with nine men against Celta Vigo in La Liga on Sunday after Williot Swedberg scored an audacious goal with his heel and a second in stoppage time to leave the hosts four points off leaders Barcelona.

Swedberg cleverly diverted a cross from Bryan Zaragoza past Thibaut Courtois in the 53rd minute to put Celta ahead and had an easy finish three minutes into added time, going around the goalkeeper to wrap up the points.

Real’s cause was not helped by the 64th minute dismissal of Fran García, who picked up two yellow cards in 60 seconds, but they laid siege to the visitors’ goal for the last 20 minutes as Celta went into a defensive shell to hold onto their advantage.

The Real defender Álvaro Carreras was also dismissed for two cautions, his second coming in stoppage time at the end of the game as the home side’s frustrations boiled over.

It was a second clean sheet in 15 league games this season for Celta, whose keeper Ionut Radu made a first-half save from Jude Bellingham’s header and stopped a second-half free-kick whipped in by Kylian Mbappé. Real stay on 36 points from 16 games as Celta, who are now 10th, celebrated a first win at the Santiago Bernabéu in 19 years.

“With the team they have and their quality, it’s difficult to match them, but we read the game well,” said the Celta striker Borja Iglesias. “We had possession, we played in their half, we played a fantastic match.”

Jude Bellingham receives treatment for a cut above his right eye. Photograph: Europa Press Sports/Europa Press/Getty Images

Xabi Alonso’s stuttering Real team have now won only one of their last five league games as they await the midweek arrival of Manchester City in the Champions League.

Earlier on Sunday, Espanyol moved up to fifth as Roberto Fernandez’s first-half penalty handed them a 1-0 home win over Rayo Vallecano as both sides finished with 10 men.

Elche’s Rafa Mir scored twice as they ran out 3-0 home winners over struggling Girona, while hosts Valencia and Sevilla remained in the bottom half of the table after a 1-1 draw.

The Napoli striker Rasmus Højlund stole the spotlight as his two goals secured a 2-1 home victory against Juventus, lifting the champions to the top of Serie A.

Napoli have 31 points, one ahead of Inter in second. Third-placed Milan, who are three points off the pace, visit Torino on Monday. Juventus remain seventh on 23.

Napoli opened the scoring after seven minutes when David Neres burst down the right, shook off Teun Koopmeiners and squared to Højlund, who slid in to steer the ball home. The hosts dominated much of the first half and created the clearer chances, with Scott McTominay nearly scoring just before the interval when his header glanced past the near post. Napoli were given a fright as the Scot was forced to visit the touchline several times for treatment, seemingly struggling with a muscular issue, though he managed to play on.

Although the home side continued to press after the break, it was Juventus who hit back just before the hour with a counter-attack that found Kenan Yildiz inside the box and he drilled a low effort into the far corner to equalise.

Napoli’s Rasmus Højlund scores his first goal against Juventus. Photograph: Ciro Fusco/EPA

Højlund was not finished, however, and in the 78th minute he scored a second goal, heading in from point-blank range after Weston McKennie diverted a header to the Dane as he tried to clear a cross. Despite a late Juventus push, Napoli held firm to claim all three points much to the relief of the home crowd.

Roma endured a 1-0 defeat at Cagliari, with a second-half red card for Mehmet Celik leaving them vulnerable before Gianluca Gaetano’s late winner. The loss leaves Roma fourth on 27 points.

Roma’s city neighbours, Lazio, held Bologna to a 1-1 draw despite playing the final 10 minutes with 10 men after Mario Gila’s red card, while Jamie Vardy did not find the net but his Cremonese side defeated Lecce 2-0.

Borussia Dortmund scored once in each half through Julian Brandt and Nico Schlotterbeck to ease past Hoffenheim 2-0 on Sunday and tighten their hold on third place in the Bundesliga.

Dortmund, who stretched their unbeaten league run to six matches, are third on 28 points, one behind second-placed RB Leipzig, 6-0 winners against Eintracht Frankfurt on Saturday. The Bundesliga leaders, Bayern Munich, are on 37 points following their 5-0 demolition of Stuttgart. Hoffenheim, who endured their first defeat after their own six-game unbeaten run, are fifth on 23.

Dortmund, who face Norway’s Bodø/Glimt in the Champions League on Wednesday with the Ruhr valley club on track for a top-eight finish in the league phase, had to wait until the 43rd minute for their first good move in an even first half, with Brandt finishing with a tap-in.

As Hoffenheim pushed for an equaliser Dortmund struck again, with Schlotterbeck’s off-balance shot on the hour. The Dortmund forward Serhou Guirassy should have added another late on when he was sent through by Yan Couto but his shot came back off the crossbar.