The match began with a swift breakaway goal from Villarreal, as Ayoze Pérez scored from a cross-field pass from Nicolas Pépé. This early goal set the tone for the game, but Barcelona responded positively and created several scoring opportunities.
Fermín López had a chance to equalize early on, but his shot was saved by Luiz Júnior. The match then settled into a familiar pattern, with Barcelona dominating possession and Villarreal countering on the break.
Robert Lewandowski had a header saved, while Nicolas Pépé missed a breakaway chance. Despite Villarreal's defense shutting down Lamine Yamal for long periods, the teenager equalized with a trademark strike in the 38th minute.
Fermín López scored his ninth league goal in first-half injury time, and Barcelona's hopes of a comeback were boosted. However, Villarreal's Santi Comesaña scored a beautiful chip over Marc-André ter Stegen just five minutes after halftime.
Villarreal continued to push forward, making the game competitive. Barcelona applied pressure, but Villarreal's defense held firm, and a thrilling match unfolded. In the closing stages, Frenkie de Jong and Fermín López worked tirelessly in midfield, while Raphinha had a chance to level the score but missed it.
Villarreal's Pau Cubarsí and Iñigo Martínez made crucial defensive contributions, but the visitors' defense was breached when Tajon Buchanan was left alone in the box and scored the winning goal.
Marcelino secured a second win in 23 personal encounters against Barcelona, while Hansi Flick's side will travel to Athletic Club on the final weekend hoping to end the season on a high note.
Flashscore Man of the Match: Fermín López (Barcelona)