Real Madrid missed the opportunity to strike a blow to the title hopes of their rivals as Villarreal claimed a 1-1 draw at the Bernabeu.
Villarreal made an impressive start, but were left disappointed when two big chances were wasted in the early stages.
Iker Casillas first came to the rescue for the hosts with a fine save from Gerard Moreno, before Dani Carvajal headed off the line to keep out the effort which followed from Moi Gomez.
Real struggled to create chances early on, but improved as the first half progressed to come close through Gareth Bale and Raphael Varane, who both headed wide from Toni Kroos corners.
Carlo Ancelotti's side then struck the crossbar when Bale's cross drifted onto the woodwork before bouncing to safety.
The hosts were gifted the chance to break the deadlock five minutes into the second half when Eric Bailly pulled down Cristiano Ronaldo, who stepped up to fire his side ahead with a confident penalty.
Sergio Asenjo kept his side in the game with a save from Ronaldo moments later, and Real wasted another chance when Bale somehow managed to send the ball over after being picked out by his Portuguese teammate in the box.
Real would pay for missing the chance to double their lead as Villarreal equalised through Gerard, who combined with substitute Luciano Vietto before beating a helpless Casillas with a low effort.
Asenjo stood in the way of Ronaldo again with another stop to deny the forward, and Karim Benzema would add to the list of missed opportunities when he headed over from an inviting Kroos free kick.
Villarreal continued to respond impressively to the Real pressure, but it was Asenjo who stole the show once more by getting a hand to Ronaldo's powerful header.
Both sides went in search for the winner in a gripping finish, but substitute Jese struck the best of the late opportunities wide as the home side were forced to settle for a draw which means their advantage at the top of the table is just two points.