Cristiano Ronaldo scored a scrappy opener and a winner from the penalty spot, after Iago Aspas' equaliser, to take his tally to 188 goals in 186 appearances for the club.
Celta substitute Park Chu-young headed against the crossbar late on but Real held on for victory.
Celta made an impressive start to the match, forcing visiting keeper Diego Lopez into a string of saves in the first 10 minutes.
Lopez charged out to block Aspas' effort at point-blank range in the first minute before more comfortably gathering Augusto Fernandez's cross-shot.
Aspas was denied once more as Lopez tipped a shot around the post - and he kept his best save for Alex Lopez's bouncing volley after the corner was only half-cleared.
Real then came into the game but Ronaldo wasted their first opportunity when, through on keeper Javi Varas, he tried and failed to square the ball to Karim Benzema.
The Portugal star had a left-footed curler saved by Varas, who then superbly denied Benzema with his legs from close range.
Benzema's header and Marcelo's drive were also saved and, when Varas flicked Luka Modric's corner off the head of Ronaldo but not out of the box, defender Raul Albiol's effort was woefully high and wide.
Jose Maria Callejon drew another excellent save from Varas before Ronaldo headed Benzema's cross against the bar from close range.
Ronaldo was twice off target early in the second half, while Varas saved from Benzema and Marcelo shot over.
Real took the lead in the 61st minute when, from Mesut Ozil's corner, Callejon's drive was deflected to Ronaldo's feet six yards out and he turned and finished with ease.
But the advantage lasted only two minutes as Real were caught cold by a quick throw-in and Mario Bermejo crossed to Aspas, whose finish took a huge deflection off Pepe to leave Lopez helpless.
Varas blotted his copybook when he rashly hacked down substitute Kaka, with the ball running harmlessly out of play, and was booked. Ronaldo fired the penalty straight down the middle to make it 2-1 after 72 minutes.
Aspas went close to a second goal of his own when his 25-yard effort bounced awkwardly in front of goal, but Lopez saved and reacted well to gather the loose ball.
Vadim Demidov went close to a second equaliser when a corner fell to him six yards out but his instinctive toe-poke struck Michael Essien and bounced wide.
Real substitute Gonzalo Higuain produced an extraordinary miss, sidefooting Ozil's cross wide from six yards.
But Celta would not lie down and on-loan Arsenal forward Park sent one effort over the bar before beating Lopez to Danijel Pranjic's cross but heading against the crossbar.
Varas made a stoppage-time save from Higuain and Kaka sent the last kick of the match into the side netting.