France defender Ferland Mendy opened the scoring with a ferocious finish from a tight angle before countryman Karim Benzema doubled the lead.
But Real were forced to endure a nervous second half after Darwin Machis fired through Thibaut Courtois’ legs.
Zinedine Zidane’s side are four points clear of nearest rivals Barcelona with two games remaining.
Given Real’s superior head-to-head record over Barca, Real require two points from their final two games, at home to fifth-placed Villarreal on Thursday and at relegation-threatened Leganes on Sunday, to win the league.
“We have to be happy and rest up for Thursday,” said Real boss Zidane after his side’s ninth successive win since La Liga resumed in June.
“We will be back training on Tuesday and we will be back on the pitch on Thursday. The final minutes were tough. Granada made us defend a lot in the second half.”
Gareth Bale was once again an unused substitute as Real scored twice in six first-half minutes before the hosts hit back.
Skipper Sergio Ramos made a crucial clearance off the line to deny Ramon Azeez a dramatic equaliser in the closing stages.
Wales forward Bale, who has been at Real since 2013, has started just 12 La Liga matches this season.
He has not played since being substituted in the 2-0 win over Mallorca on 24 June