Real Sociedad moved level with on points with Barcelona and Real Madrid in La Liga on Sunday with a 2-1 win against Granada.
Earlier, Osasuna beat Alaves 4-2, while Real Valladolid ran out as 3-0 winners over Real Mallorca.
Villarreal and Athletic Bilbao played out a goalless stalemate, and elsewhere there were wins for Getafe and Eibar.
Real Valladolid 3-0 Real Mallorca
Villarreal 0-0 Athletic Bilbao
Osasuna 4-2 Alaves
Leganes 1-2 Eibar
Granada 1-2 Real Sociedad
Celta Vigo 0-1 Getafe
A cool finish from Portu opened the scoring in the 21st minute for Real Sociedad at Los Carmenes before Granada equalised 15 minutes later through an Alvaro Vadillo free-kick.
The Guardian's Sid Lowe explained the situation the two sides found themselves in at 1-1:
The winner came for La Real as Portu grabbed his second in the 89th minute after being fed by Adnan Januzaj.
Osasuna and Alaves shared a six-goal thriller in their clash.
Ruben Garcia opened the scoring for the hosts from close range before Chimy Avila doubled their lead with an excellent first-time finish. Victor Laguardia hit back a minute later.
Penalties for Roberto Torres and Juan Villar either side of a spot-kick from Lucas Perez—who found the net for the sixth La Liga match running—ensured Osasuna remain unbeaten at the Estadio El Sadar in 31 matches:
Youssef El-Nesyri bundled Leganes in front against Eibar after just six minutes, but Charles Dias replied with a header 11 minutes later to level proceedings.
Kike Garcia decided the game in the visitors' favour with six minutes of normal time remaining:
Celta Vigo and Getafe were separated by Kenedy's first goal for the latter while on loan from Chelsea:
Mallorca's search for an away point continued as they were sank 3-0 at Valladolid.
Joaquin Fernandez put the hosts in front with an emphatic header five minutes before half-time, while five minutes into the second half, Enes Unal dispatched a penalty after being brought down by goalkeeper Fabricio Agosto.
Sandro Ramirez rounded out the scoring with a 25-yard rocket deep into injury time.