The 30-year-old has long been linked with a move to Rangers, with Shankland being a boyhood fan of the Gers.
The striker has had a prolific four seasons with Hearts, scoring 88 goals in his 171 games in all competitions.
Rangers have now confirmed the Scotland international’s signing for an undisclosed fee, with Shankland signing a two-year deal with an option for a third.
"I am delighted to be here and to have this opportunity,” Shankland told Rangers TV. “Rangers is my boyhood club, and it has always been a dream to play here, so I was really keen to get it done.
"A lot of hard graft has gone in to get to this point, and I'm just really happy.
“The club are in a position where they want to get back to winning silverware more regularly, and I want to be a big part of that, so that's what I have come here to do."
