Player Ratings: Real Madrid 3 – 1 Villarreal
Thibaut Courtois: 8.
A massive save on a first-half breakaway kept Villarreal from taking the lead. Commanded his area well.
Fede Valverde: 8.5. Played right-back — and, naturally, after saying he wasn’t
born to play there, he looked born to play there. Tremendous defensively, relentless work rate, and delivered quality balls into the box. Should’ve had an assist for one of his passes to Bellingham late on.
Éder Militão: 7.5.
Solid in most defensive duels and read the high line well, but two careless giveaways in buildup nearly proved costly.
Álvaro Carreras: 7.
Still looks a bit short on confidence after the rough night against Atlético.
Aurélien Tchouaméni: 6.5.
Below his usual standard. Loose with the ball at times and slow to track runners. Still managed to get into great scoring positions on two headers but couldn’t finish either.
Dani Ceballos: 7.
Good pressing and tidy distribution. Helped maintain possession in tight areas and supported the midfield press well.
Franco Mastantuono: 8.
Lively on both ends. Delivered pinpoint crosses and covered tons of ground defensively. Should’ve converted one of his chances and could’ve had an assist after setting up Tchouaméni.
Arda Güler: 7.5.
Not as influential as in recent matches, but still provided nice link-up play and some silky touches in tight spaces.
Vinícius Jr: 9.5.
Virtuoso display. Scored the opener, won and converted a penalty, and absolutely roasted Mouriño all night. Registered 6 key passes and 6 successful dribbles. Unplayable.
Kylian Mbappé: 8.5.
Even when not at his sparkling best, he came away with a goal and an assist. Clinical when it mattered. Up to 14 goals this season already.
Substitutes
Jude Bellingham: 8.5.
Looked close to full match sharpness. Brought energy, leadership, and a vital defensive tackle that sparked Madrid’s third goal. Constantly found dangerous pockets of space.
Brahim Díaz: 8.
Solid cameo — unselfishly squared for Mbappé to seal the game and injected fresh pace in attack.
Eduardo Camavinga: 8.
Dynamic substitute appearance. Won several key tackles in midfield, though could’ve marked Villarreal’s goalscorer tighter.
Rodrygo Goes: N/A.