Mbappe watched from the substitutes' bench after missing some team training sessions during the week with discomfort in his left knee. Madrid coach Alvaro Arbeloa said Friday he was able to play, but evidently he did not want to rush his star goal-getter.
Nor did he need to on Saturday.
Mbappe and Jude Bellingham (hamstring) watched as Madrid (60 points) produced an assured team performance to end the visitors' 10-game unbeaten run across all competitions and move two points clear of Barcelona before the defending champion visit Girona on Monday.
"I think we did a spectacular job defensively and up front as well," Madrid captain Fede Valverde, who scored his first goal of the season, said after the team's eighth league victory in a row.
"We had so many chances, but we just couldn't convert them. It's true they had some, too, but (goalkeeper Thibaut) Courtois was tremendous. It was a great match from the whole team."
Gonzalo Garcia opened the scoring with a slight touch to Trent Alexander-Arnold's cross in the fifth minute.
Dean Huijsen conceded a penalty for bringing down Yangel Herrera, and Mikel Oyarzabal duly equalised from the spot in the 21st.
The referee awarded another penalty at the other end four minutes later when Jon Aramburu caught Vinicius' ankle, bringing him down. The Brazilian dusted himself off to score from the spot.
Valverde gratefully scored the third in the 31st after being left too much space at the edge of the penalty box and Vinicius made it 4-1 with his second penalty after the break, awarded after Aramburu was again penalised for bringing him down.
Elsewhere, Borja Iglesias scored in added time to salvage a 2-2 draw for seventh-placed Celta Vigo at sixth-placed Espanyol.
Getafe, 10th, held on to upset visiting fourth-placed Villarreal 2-1, and 10-man Sevilla drew 1-1 with Alaves in a duel between two strugglers.