The home side began the game well as Michael Krohn-Dehli burst forward from midfield and teed up Nolito on the left. The winger cut inside onto his right foot, but his shot was deflected over by Luka Modric.
Nolito again caused havoc for the Madrid defence minutes later as he drilled a cross in from the left for Charles, but when unmarked in the penalty area he could only head wide of the target.
After half time, Madrid responded and Ramos should have equalised for them from a corner, but he put his effort past the post from close range.
Minutes later, Modric was guilty of the same as he failed to hit the target after latching onto Marcelo's cross at the near post.
Celta took advantage of these missed opportunities by doubling their lead through Charles, who got his second of the game as he latched onto Xabi Alonso's poor back-pass and fired the ball past Lopez.
Madrid threatened again through Asier Illarramendi as he raced into the area and he fired a low shot at goal, but Alvarez was there again to block the ball with his legs and secure the win for his side.