Ruben Pardo was critical to Sociedad's rampant win, setting up his team's first three goals from set pieces, while Swiss striker Haris Seferovic came off the bench to create a goal and score another in a stunning performance by the home side at the Estadio Municipal de Anoeta.

The victory took Sociedad to seventh on the La Liga table with 17 points, although Levante could regain that position and push Jagoba Arrasate's men back to eighth if they overcome Granada on Sunday.

While Real Madrid defeated capital city rivals Rayo Vallecano 3-2 on Saturday, it was Sociedad's triumph in San Sebastian, which stood out.

Sociedad dominated the contest with eight shots on goal, compared to Osasuna's solitary effort on target, but the hosts had to wait until just after the half-hour mark to get on the scoreboard.

Pardo's curled free-kick found the head of Ion Ansotegi and the 31-year-old central defender powered the ball down and past Osasuna goalkeeper Andres Fernandez.

Sociedad doubled their lead three minutes after the break when Inigo Martinez got to Pardo's corner first and sent a strong header into the roof of the net before Osasuna suffered another blow with French defender Jordan Loties sent off for a trip on Carlos Vela when the Mexican was clear through on goal.

Another Pardo delivery created Sociedad's third goal as Fernandez flapped at the 21-year-old midfielder's corner, allowing Antoine Griezmann to head home from close range.

Seferovic came on for Vela with 18 minutes remaining and made an immediate impact as he released Gonzalo Castro down the right and the Uruguayan rounded Fernandez to slot the ball into the net from a tight angle.

In the 88th minute, Seferovic completed the rout in the Basque derby, tapping home after Imanol Agirretxe and Jose Angel combined down the left.

The loss left Osasuna in 17th position, one spot and one point outside La Liga's relegation zone.

Celta took advantage of Osasuna's loss to move above the Pamplona-based club and three others to 13th after a 1-0 victory at Sevilla's Estadio Ramon Sanchez Pizjuan.

Alex Lopez scored the only goal of the game, slotting the ball into the net after he intercepted a poor pass by Sevilla goalkeeper Beto.

In Madrid, a double from Cristiano Ronaldo saw Real win 3-2 at Vallecano, although two second-half penalties saw the home side almost snatch a draw.

In Saturday's other result, Rodri scored for Almeria as they defeated 10-man Real Valladolid 1-0.