Defender Eder Militao had four efforts at goal and landed three on target against Osasuna
Real Madrid remain two points behind La Liga leaders Atletico Madrid after late goals from Eder Militao and Casemiro sealed victory over Osasuna.
Centre-back Militao eventually ended Osasuna's resistance when he headed in Isco's corner after 76 minutes.
Fellow Brazilian Casemiro then met Karim Benzema's pass to confirm the points four minutes later.
Atletico Madrid had stretched their lead at the top to five points with victory at Elche earlier on Saturday.
Barcelona, who missed the chance to go top in losing to Granada on Thursday, can move level on points with Real with victory against Valencia on Sunday, while fourth-placed Sevilla can stay within three points of the summit if they beat Athletic Bilbao on Monday.
Real Madrid v Osasuna as it happened
In his first start since January, Eden Hazard went close to an opener but was denied by a fingertip save from Sergio Herrera.
The Osasuna goalkeeper also kept out Militao's powerful first-half header, while Chimy Avila's finish was ruled out for offside as Osasuna threatened before the break.
Real struggled to create opportunities in a second half which saw centre-back Raphael Varane leave the field through injury, until Militao delivered with his side's first effort on target after the restart.
With the visitors deflated, Casemiro's finish ensured Real maintain the pressure on city rivals Atletico before making the trip to Premier League Chelsea for the second leg of their Champions League semi-final on Wednesday.
With the tie poised at 1-1, Zinedine Zidane's side travel to Stamford Bridge looking to reach the Champions League final for the fifth time in eight years.
Line-upsMatch StatsLive Text
1Courtois19Odriozola3Militão5Varane12Marcelo14Casemiro31Blanco11Asensio7E Hazard20Vinícius Júnior9Benzema1Courtois19Odriozola3Militão5VaraneSubstituted forNachoat 45'minutes12MarceloSubstituted forGutiérrezat 64'minutes14Casemiro31Blanco11AsensioSubstituted forArribasat 83'minutes7E HazardSubstituted forIscoat 72'minutes20Vinícius JúniorSubstituted forRodrygoat 64'minutes9Benzema
1Herrera2Vidal Miralles23Hernández5García39Sánchez24Torró10Torres27Moncayola28Martínez14García9Ávila1Herrera2Vidal Miralles23Hernández5García39Sánchez24TorróSubstituted forRodríguez Menéndezat 84'minutes10TorresSubstituted forBarja Alfonsoat 81'minutes27Moncayola28MartínezBooked at 54minsSubstituted forBrasanacat 64'minutes14GarcíaSubstituted forLópezat 81'minutes9ÁvilaSubstituted forBudimirat 64'minutes
3Álvaro Armado4García6Sanjurjo7Rodríguez Menéndez8Brasanac11Barja Alfonso12Roncaglia15Ramalho17Budimir19Gallego Puigsech20López25PérezReferee:Guillermo Cuadra Fernández
Home TeamReal MadridAway TeamOsasunaPossessionHome65%Away35%ShotsHome22Away3Shots on TargetHome6Away2CornersHome8Away0FoulsHome9Away12
Match ends, Real Madrid 2, Osasuna 0.