A busy start saw Karim Benzema shoot wide after Vinicius Junior's run down the left before Thibaut Courtois palmed away a dangerous Nabil Fekir free kick. The Betis player was then booked for a penalty-seeking dive as the first half became scrappy, with five yellow cards handed out in the minutes before the interval.
Madrid improved after the break. Benzema had an offside header superbly kept out by goalkeeper Rui Silva before Carvajal made the breakthrough, volleying in from the France forward's cross. Substitute Marco Asensio shot off target and Eden Hazard had a left-footed effort saved as los Blancos pushed for a second, but Courtois had to make a crucial late save from Martin Montoya.
Carvajal has had a dreadful time with injuries -- he made just 11 league starts last season -- so it was encouraging to see him back, let alone making a rare appearance on the scoresheet! Lucas Vazquez proved an able deputy in his absence but when Carvajal is fit and on form, there are few better, more committed right-backs.
Benzema now has two goals and three assists in three games this season and his importance seems to keep growing. If Madrid can finally get a deal for Kylian Mbappe done, the two will form a duo to strike fear into any team in Europe, let alone LaLiga.
Luka Modric and Toni Kroos remain huge absences in midfield. Any team would miss them, but replacements Isco and Fede Valverde -- very different players and gifted in their own right -- do not offer anything like the same degree of tempo-setting control and authority.
The narrow lead meant that Madrid's win never looked safe, and Betis threatened an equaliser up to the moment the final whistle brought sighs of relief from the away side. For spells, Betis looked the better team, with a clearer idea of what they wanted to do.
Manager rating out of 10
7 -- Carlo Ancelotti's starting XI was as expected, with the key decisions being David Alaba joining Eder Militao at centre-back and Vinicius Junior starting after starring as an impact substitute. Madrid looked laboured in the first half, but whatever Ancelotti said at the break worked. In truth it still wasn't the best game or team performance, but it did result in a big three points.
Player ratings (1-10; 10 = best. Players introduced after 70 minutes get no rating)
GK Thibaut Courtois, 7 -- His best first-half moment came when he got down well to get to Fekir's free kick and he saved the three points in added time when keeping out Montoya's effort.
DF Dani Carvajal, 8 -- His first LaLiga start since April. Fiercely competitive as ever in a running battle with ex-Barca youngster Juan Miranda. An excellent finish for the goal, guiding the ball into the far corner with a controlled volley.
DF Eder Militao, 7 -- Had looked shaky this season after taking a giant step forward last year, but was much better here. One early effort on goal.
DF David Alaba, 7 -- Switched from full-back to centre-back to cover for the absent Nacho; Madrid missed his quality getting forward as a result.
MF Federico Valverde, 7 -- His 100th LaLiga game. Got into the box to almost set up an early chance and never stopped running.
MF Isco, 6 -- Followed his best performance for some time -- in the first half at Levante last week -- with a much weaker display. Slows things down too often. Substituted after 65 minutes.
FW Vinicius Junior, 7 -- Deserved a start ahead of Hazard after scoring three goals in 55 minutes off the bench. Began well; his penetrating run the best moment of the first half. One sublime piece of skill later beat two defenders.
FW Gareth Bale, 6 -- One outstanding second-half cross for Benzema. Bale has become a player who does give the side a goal threat, but offers next to nothing in terms of collective team play.
FW Karim Benzema, 8 -- Put Madrid's best first-half chance inches wide. A second-half (offside) header was somehow kept out by Silva, before he set up Carvajal for the goal. So vital.
FW Marco Asensio, 6 -- Replaced Isco and could have scored Madrid's second.
MF Lucas Vasquez, 6 -- Came on for Bale on the right wing before switching to right-back.
FW Eden Hazard, NR -- Had one late shot saved.
MF Rodrygo, NR -- Played the last ten minutes.