A full summary of Tuesday night's Premiership action
Rangers cruised to victory in Perth, while Hearts and Kilmarnock drew at Tynecastle.
Rangers swept St Johnstone aside with a commanding first-half performance to narrow the gap on Celtic to six points for at least 24 hours.
James Tavernier set the visitors on the road to victory with a penalty after Alfredo Morelos was brought down by Alan Mannus and Josh Windass doubled Rangers' lead on 26 minutes.
A sweetly-struck free kick from Sean Goss made it 3-0 just before half-time and Alfredo Morelos added a fourth with a deft header 11 minutes after the restart.
St Johnstone pulled a goal back just after the hour mark but it was no consolation for Tommy Wright after his side were outclassed on their own turf just days after picking up their first home league win since September.
Having fought back from 2-0 down to earn a point against Hibernian on Saturday, Kilmarnock took an early lead against Hearts at Tynecastle.
Eamonn Brophy put Steve Clarke's side ahead after just three minutes but the visitors couldn't hold on to their advantage for long.
Former Kilmarnock favourite Steven Naismith equalised after 26 minutes, heading past Jamie MacDonald from six yards.
Neither side could find a winner in the second half but Hearts had a golden opportunity to take three points when they won a penalty in the 90th minute. Kyle Lafferty stepped up but McDonald's save ensured both sides ended with a point.