Match ends, Villarreal 2, Real Madrid 2.
Santi Cazorla proved his class as he scored twice for Villarreal to deny Real Madrid a chance to make further inroads on La Liga leaders Barcelona.
The visitors, who made a pre-Christmas trip to the Club World Cup, looked tired and faced a rejuvenated Cazorla, who has suffered a long injury lay-off.
His curler earned an early lead before Karim Benzema's header made it 1-1.
Raphael Varane nodded in to put Real ahead, but Cazorla's late header moved Villarreal out of the relegation zone.
Santi Solari's Real remain fourth, seven points behind Barcelona, four behind second-placed Atletico Madrid and two behind third-placed Sevilla.
Real's night was not improved by Gareth Bale being substituted at half-time with what appeared to be a calf injury.
And they were made to pay by a Villarreal team, who merited at least a point for their superior attacking endeavour and had a midfielder who showed why he was so revered while at former club Arsenal.
Cazorla shows class is permanent
The hosts were inspired by Cazorla, who scored his first La Liga goals of the season after a nightmare two years following an horrific Achilles tendon injury, which needed 11 operations.
The 34-year-old returned to his former club Villarreal last summer after six years with the Gunners, but he had spent the last two on the sidelines leading to doubts about his ability to walk because of bacteria "eating" eight centimetres of his ankle tendon.
His opener showed the kind of grace which lit up north London for four years, when he latched onto the impressive Samuel Chukwueze's pass and curled a right-footed shot past the out-stretched Thibaut Courtois.
A rare header from the diminutive Spaniard, which left the home crowd in raptures following Pablo Fornals' cross, also proved Cazorla had lost none of his nous on when to arrive in the penalty area.
Real struggle to lift themselves after reduced break
Real had six days' less rest than Villarreal coming into the game thanks to their Club World Cup win in Abu Dhabi, which came on 22 December.
And after a frustrating season where they replaced former manager Julen Lopetegui with Solari in October, they appeared to lack sharpness as they were tested from the start by Nigerian 19-year-old Chukwueze, who has been linked with Arsenal.
The teenager tested Courtois before setting up Cazorla's opener and was a constant thorn in Marcelo's side down the Villarreal right.
The visitors' two headed goals seemed to catch out Villarreal goalkeeper Sergio Asenjo on both occasions, but he redeemed himself when saving from Lucas Vazquez in the second half when the Real forward was clean through on goal.
Bale made little impact before he was replaced by Isco, but it was Luis Garcia's home team who posed the greater threat in the second period and their equaliser was fully deserved as they boosted their hopes of staying in the top flight by moving above Athletic Bilbao on goal difference.
- 3GonzálezBooked at 45mins
- 11CostaBooked at 90mins
- 5CáseresSubstituted forToko Ekambiat 63'minutes
- 18Fuego MartínezSubstituted forTrigueros Muñozat 82'minutes
- 7MorenoSubstituted forBaccaat 68'minutes
- 4Funes Mori
- 14Trigueros Muñoz
- 17Toko Ekambi
- 4RamosBooked at 89mins
- 8KroosSubstituted forVinícius Júniorat 86'minutes
- 14CasemiroBooked at 41mins
- 10ModricSubstituted forValverdeat 64'minutes
- 11BaleSubstituted forIscoat 45'minutes
- 28Vinícius Júnior
- Pablo González Fuertes
- Shots on Target
Second Half ends, Villarreal 2, Real Madrid 2.
Foul by Vinícius Júnior (Real Madrid).
Manu Trigueros (Villarreal) wins a free kick in the defensive half.
Casemiro (Real Madrid) wins a free kick in the defensive half.
Foul by Karl Toko Ekambi (Villarreal).
Jaume Costa (Villarreal) is shown the yellow card for a bad foul.
Daniel Carvajal (Real Madrid) wins a free kick on the right wing.
Foul by Jaume Costa (Villarreal).
Sergio Ramos (Real Madrid) is shown the yellow card for a bad foul.
Foul by Sergio Ramos (Real Madrid).
Carlos Bacca (Villarreal) wins a free kick in the attacking half.
Substitution, Real Madrid. Vinícius Júnior replaces Toni Kroos.
Attempt saved. Isco (Real Madrid) right footed shot from the right side of the box is saved in the centre of the goal. Assisted by Daniel Carvajal.
Offside, Villarreal. Pablo Fornals tries a through ball, but Carlos Bacca is caught offside.
Attempt blocked. Isco (Real Madrid) left footed shot from outside the box is blocked. Assisted by Federico Valverde.
Goal! Villarreal 2, Real Madrid 2. Santi Cazorla (Villarreal) header from very close range to the centre of the goal. Assisted by Pablo Fornals.
Substitution, Villarreal. Manu Trigueros replaces Javi Fuego.
Corner, Villarreal. Conceded by Daniel Carvajal.
Offside, Real Madrid. Isco tries a through ball, but Karim Benzema is caught offside.