Andriy Lunin—6: No real fault in the goals, but will be disappointed to have conceded four, especially with a Champions League starting spot on the line.
Lucas Vazquez—9: A fantastic performance and a fantastic season, overall. Scored with his left foot, curled an inch-perfect cross to assist the Joselu goal, and found the run of Arda Guler to notch another assist — all within the first 45 minutes.
Militao—3: Nightmare match against the in-form Sorloth. Should have done better on the second, third, and fourth Sorloth goals.
Rudiger—6: Cleared and cleaned up any loose balls that filtered into the backline though did have some miscommunication with Militao.
Fran Garcia—6: Ran tirelessly up and down the left flank defended well 1 v 1 but tired in the second half.
Fede Valverde—7: Played as the lone defensive pivot in a midfield with Modric and Ceballos. Covered a massive amount of ground and played like the season was on the line.
Dani Ceballos—5: Proficient on the ball and good in tight situations but one glaring mistake in his own box, losing possesion, led to the first Sorloth goal.
Luka Modric—8: Playing with a bounce in his step, connecting passes and always one step ahead of the opposition defender.
Arda Guler—9: There is no doubting that this kid is special. Two goals to his name (six goals in four starts) both of his goals gave example to his technial quality and composure in front of goal.
Brahim Diaz—7: Floated all across the front line and produced subtle flicks and touches that decieved the Villareal defense, including on the third Madrid goal where he registered an assist.
Joselu—7: Superb near post run and header to score the second goal of the game.
Eduardo Camavinga—7: Replaced Valverde in midfield as Ancelotti attempted to stop the bleeding after the team conceded three goals in quick succession to start the second half. Some nice inter-changes with Modric and Arda Guler to break through the Villarreal press. Drew a number of important fouls inside the Madrid defensive box to help relieve pressure.
Nacho—5.5: Replaced Militao who had a tough game trying to deal with Sorloth. Defensively line was continually stretched due to the lack of midfield coverage and the quick Villarreal transitions. Had a couple of heavy passes to teammates that put them in a tough spot.
Rodrygo—5: Failed to bring the spark provided to turn the game.
Mario Martin—6: Came in and immediately got stuck in with some strong challenges.