Match ends, Dundee 0, St. Johnstone 2.
St Johnstone secured a sixth successive Scottish Premiership away win to end 2018 in the top half of the table and leave Dundee bottom.
Scott Tanser's cross went in off the post after 35 seconds and Liam Craig celebrated becoming St Johnstone's second-highest all-time appearance holder with a deserved second goal.
Dundee, who miss the chance to go above St Mirren, rarely threatened.
The gap between the bottom two stays at two points as the winter break begins.
When the top flight resumes, St Johnstone will be well placed, with Tommy Wright's side - who have a game in hand - five points off Aberdeen and seven behind third-placed Kilmarnock.
Solid Saints, despair for Dundee
Tanser's outswinging cross from the left dropped over goalkeeper Jack Hamilton's head and went in off the upright to give the Perth side the perfect start - a first St Johnstone goal for the left-back.
And they seemed unsatisfied with their advantage. Tanser went through and shot at Hamilton before Tony Watt and Matty Kennedy had efforts blocked in quick succession and Chris Kane tested the goalkeeper.
The hosts could not get a foothold in the game and were restricted to speculative crosses until Calvin Miller went close from the left.
Kennedy's influence grew at the start of the second half with the winger drawing a save from Hamilton then firing wide.
And it was from his cross that the Perth side doubled their lead as he received David Wotherspoon's short corner and delivered for Kane to head on to Craig for a close-range half-volley.
It would have been worse for Dundee had Hamilton not denied Kennedy, Kane and substitute David McMillan and the hosts never looked like denying St Johnstone a sixth consecutive clean sheet on the road.
'Stability key for St Johnstone' - analysis
BBC Scotland's Tyrone Smith at Dens Park
There are a number of factors behind St Johnstone's success, chief among them is undoubtedly stability. That is typified by Liam Craig, who made his 362nd appearance for the club to move second in the club's all-time appearance list behind only Steven Anderson.
It is no surprise St Johnstone will start 2019 in the top half of the table.
But in stark contrast, Dundee's troubles continue. Jim McIntyre will be thankful for the winter break and the chance to overhaul his squad in an attempt to preserve their Premiership status.
'Dundee second best' - reaction
Dundee manager Jim McIntyre: "We were second best all over the pitch. We played a major part in gifting that first goal and after that St Johnstone never looked back.
"St Johnstone were first to most balls, they were first to most second balls too. I'm not going to hide behind that, it was miles away from where it needs to be."
St Johnstone manager Tommy Wright: "We have dominated from the first whistle to the last and it is as good an all-round team performance that the players have given me, maybe in my whole time here.
"Thirty-four points after 20 games is an incredible return for us. It is what teams at the very top of the league do - they go away from home, they keep clean sheets and they win games. We've done it."
- 23BoyleBooked at 64mins
- 27CurranBooked at 81mins
- 8KamaraSubstituted forKallmanat 45'minutes
- 4WoodsBooked at 76mins
- 17MillerSubstituted forNabiat 64'minutes
- 33KennedySubstituted forSwansonat 82'minutes
- 26CraigBooked at 76mins
- 32WattSubstituted forMcMillanat 82'minutes
- Don Robertson
- Shots on Target
Second Half ends, Dundee 0, St. Johnstone 2.
Attempt saved. David McMillan (St. Johnstone) right footed shot from the right side of the six yard box is saved in the bottom right corner.
Attempt blocked. Kenny Miller (Dundee) left footed shot from outside the box is blocked.
Foul by Danny Swanson (St. Johnstone).
Jesse Curran (Dundee) wins a free kick in the defensive half.
Substitution, St. Johnstone. Danny Swanson replaces Matthew Kennedy.
Substitution, St. Johnstone. David McMillan replaces Tony Watt.
Jesse Curran (Dundee) is shown the yellow card for a bad foul.
Foul by Jesse Curran (Dundee).
Matthew Kennedy (St. Johnstone) wins a free kick in the attacking half.
Corner, Dundee. Conceded by Richard Foster.
Joe Shaughnessy (St. Johnstone) wins a free kick in the defensive half.
Foul by Benjamin Kallman (Dundee).
Liam Craig (St. Johnstone) is shown the yellow card.
Martin Woods (Dundee) is shown the yellow card for a bad foul.
Matthew Kennedy (St. Johnstone) wins a free kick in the defensive half.
Foul by Martin Woods (Dundee).
Attempt missed. Tony Watt (St. Johnstone) header from the left side of the six yard box is just a bit too high.
Attempt saved. Benjamin Kallman (Dundee) header from very close range is saved in the centre of the goal.