The striker was on target in either half for Philippe Clement’s men to set-up an Old Firm final back at the national stadium next month.
There were four changes to the starting XI from Wednesday evening’s draw against Dundee as Leon Balogun, Rabbi Matondo, Mohamed Diomande and Cyriel Dessers came back into the team, with Connor Goldson, Fabio Silva, Tom Lawrence and Kemar Roofe named on the bench.
For Balogun, it was a first start since February as he came in at the back to partner John Souttar, with James Tavernier and Dujon Sterling taking up the full-back positions.
Mohamed Diomande made a welcome return from injury as he joined John Lundstram and Todd Cantwell in midfield, while Rabbi Matondo also came in for his first start in over a month to support Abdallah Sima and Cyriel Dessers in attack.
It was a few years since the two sides faced off in the historic competition, with their last meeting coming in the 2021/22 final as goals from Scott Wright and Ryan Jack saw Giovanni van Bronckhorst guide Rangers to their 34th Scottish Cup success.
There was an electric atmosphere at Hampden as the match got underway for a place in the 2023/24 Scottish Cup final.
It was a fantastic start for Rangers and they got their reward early as they took advantage in this cup tie with less than five minutes on the clock.
John Lundstram played a long pass across field into the path of James Tavernier, the captain appeared to be fouled but referee Steven McLean played advantage as the ball fell for Todd Cantwell and Rangers continued their attack.
Cantwell picked out Dessers in the box, and the Nigerian international showed composure to take a touch around Nathaniel Atkinson and bury a low strike in the bottom corner.
Rangers were on the front foot, and Lundstram was next to try a shot at goal with an effort from distance but the midfielder was unable to keep it down as it drifted over the bar.
Clement was forced into an early change with just 14 minutes played at Hampden, as Ross McCausland was introduced in place of Abdallah Sima who appeared to have a muscle injury.
A spell followed for Naismith’s side as a ball given away by Rangers in a dangerous area opened up the first real opportunity for Hearts. Alan Forrest intercpeted a Lundstram pass in midfield to drive towards goal but his shot from a tight angle was blocked well by Butland.
Just seconds later the Rangers number one was called into action again as he denied Frankie Kent from close-range, before Stephen Kingsley headed over from the resulting corner.
Rabbi Matondo was next to launch a Rangers attack in a nice move by the Light Blues. The winger drove down the heart of the pitch before playing it out to McCausland on the right. The Northern Irishman returned the ball to Matondo who was now in the box, and he set it up for captain James Tavernier on the edge of the area, but his strike was held by Craig Gordon.
In first-half injury time, there was a chance for Rangers to double their advantage as Diomande won the ball back in the middle of the pitch and released Todd Cantwell. He found Rabbi Matondo on the left, but the winger was tracked by two Hearts bodies and his shot was deflected out for a corner.
For the second-half, there was an early scare for Rangers as Kenneth Vargas nicked the ball from John Souttar and made ground into the box, but James Tavernier was in a good position to clear the shot from the Hearts man.
With a triple change for Hearts and the Edinburgh side showing spells as they searched for an equaliser, Clement turned to his own bench as he introduced Fabio Silva in place of Rabbi Matondo for the final half an hour at Hampden.
Dessers almost had a second as McCausland picked him out in the box and he turned but was unable to get his shot away with the ball gathered by Craig Gordon.
At the other end, Hearts substitute Yutaro Oda’s strike was deflected just wide and from the resulting corner Shankland could only find the side netting with a back post header.
With just over 10 minutes of the game remaining, Rangers made the final period of the match more comfortable as Cyriel Dessers found the target again with the all-important second goal.
It was Todd Cantwell who drove from midfield towards goal and found the support of Dessers inside the box. The strikers’ first effort was blocked by Craig Gordon but on the second attempt he made no mistake in finding the back of the net with his 19th goal of the season.
Following the goal, Clement once again turned to his bench with Dujon Sterling, Mohamed Diomande and Todd Cantwell replaced by Borna Barisic, Nico Raskin and Tom Lawrence.
Butland pulled off an incredible save in the final minute of the match as he somehow managed to get a block on a close-range shot from Oda to ensure a clean sheet at Hampden.
Rangers will return to Hampden on May 25 to face Celtic in the 2023/24 Scottish Cup Final.
RANGERS: Butland, Tavernier, Souttar, Balogun, Sterling (Barisic, 78), Lundstram, Diomande (Raskin, 78), Cantwell (Lawrence, 78), Matondo (Silva, 63), Sima (McCausland, 14), Dessers.
Subs: McCrorie, Goldson, Dowell, Roofe.
Hearts: Gordon, Kent, Kingsley, Baningime, Grant (McKay, 60), Shankland, Atkinson (Lembikisa, 60), Devlin (Tait, 73), Rowles, Forrest (Oda, 60), Vargas (Tagawa, 73).
Subs: Clark, Cochrane, Denholm, Fraser.