Rangers produced a solid performance to reduce Celtic's lead at the top of the league to eight points ahead of next weekend's Old Firm clash.
Nuno Capucho celebrates giving Rangers an early lead
They took an early lead when Nuno Capucho headed Chris Burke's cross past Julian Speroni from close range.
Michael Ball added a freakish second 10 minutes before half time with a free kick from 40 yards.
Lee Mair hit the post for Dundee but Rangers never looked like losing the lead in a match they controlled.
Rangers started brightly and Bob Malcolm tested Julian Speroni from 25 yards with a powerful drive in the opening two minutes.
Moments later, Peter Lovenkrands exchanged passes with Capucho and slipped the ball past Speroni but Dave Mackay got back to clear off the line.
But it took Rangers only six minutes to hit the front. Chris Burke was allowed time and space on the right and he picked out Capucho with an excellent cross for the Portuguese frontman to head past Speroni.
Stefan Klos was called into action to keep his side in front three minutes later when he flew to his left to hold Barry Smith's long-range effort.
Klos kept Dundee out again after 20 minutes when Novo burst through on goal only to see the German parry his effort, with Bobby Linn unable to get on the end of the rebound.
Play ebbed and flowed and Speroni had to block a Lovenkrands shot as Rangers threatened on the counter attack.
Rangers extended their lead in bizarre fashion after 35 minutes. Ball swung a free kick into the box from 40 yards out and as Lee Wilkie contested the high ball with Lovenkrands and Capucho, the ball eluded them and Speroni and dropped into the net.
Julian Speroni is helpless as Michael Ball's free kick curls in
Lee Mair came close to reducing the deficit three minutes before the interval when the ball fell to him on the edge of the box, but his shot came off the outside of the post with Klos beaten.
Lovenkrands should have put Rangers further ahead within two minutes of the restart after being put clean through on goal by Arteta, but his shot came back off the post.
Rangers remained on top as the second half wore on and Arteta curled a free kick into the side-netting just after the hour mark.
Dundee refused to give up but Klos was largely untroubled and Garry Brady fired well over from the edge of the box.
Then, with 10 minutes remaining, Jonay Hernandez saw his free kick deflected wide.
Paolo Vanoli should have done better when Capucho found him unmarked in the box, but his effort was weak and Speroni was able to block the shot.
Dundee: Speroni, Mackay, Wilkie, Mair, Hernandez Santos,
Sancho (McLean 67), Smith, Fotheringham, Brady, Novo, Linn.
Subs Not Used: McCafferty, McDonald, Cameron, Robertson.
Rangers: Klos, Ricksen, Moore, Berg, Ball, Burke, Malcolm,
Arteta, Lovenkrands (Vanoli 79), Capucho,
Arveladze (Nerlinger 67).
Subs Not Used: McGregor, Ostenstad, Ross.
Ref: D McDonald