Antoine Griezmann scored twice as Barcelona drew level on points with second-placed Real Madrid by beating Villarreal in an incident-packed game.
Villarreal took the lead through Samuel Chukwueze's composed finish before Griezmann equalised moments later with a quality finish.
The France forward then pounced on a poor back pass by Juan Foyth, on loan from Tottenham, to put Barca ahead.
Villarreal's Manu Trigueros was sent off for a foul on Lionel Messi.
The result put Barcelona two points behind leaders Atletico Madrid, who are away to Athletic Bilbao in the late game on Sunday (20:00 BST).
Ronald Koeman's side, who were 12 points off the top earlier in the season, have one game in hand on Real Madrid.
One of Barca's remaining six league games is at home to Atletico on 8 May.
Latest Stories
-
Town council in Canada at standstill over refusal to take King’s oath
22 mins -
Trump picks Pam Bondi as attorney general after Matt Gaetz withdraws
34 mins -
Providing quality seeds to farmers is first step towards achieving food security in Ghana
45 mins -
Kenya’s president cancels major deals with Adani Group
2 hours -
COP29: Africa urged to invest in youth to lead fight against climate change
2 hours -
How Kenya’s evangelical president has fallen out with churches
2 hours -
‘Restoring forests or ravaging Ghana’s green heritage?’ – Coalition questions Akufo-Addo’s COP 29 claims
2 hours -
Ensuring peaceful elections: A call for justice and fairness in Ghana
3 hours -
Give direct access to Global Health Fund – Civil Society calls allocations
4 hours -
Trudeau plays Santa with seasonal tax break
4 hours -
Prince Harry jokes in tattoo sketch for Invictus
4 hours -
Akufo-Addo commissions 200MW plant to boost economic growth
4 hours -
Smallholder farmers to make use of Ghana Commodity Exchange
5 hours -
I want to focus more on my education – Chidimma Adetshina quits pageantry
5 hours -
Priest replaced after Sabrina Carpenter shoots music video in his church
5 hours