Doncaster had to settle for a losing bonus point as they tasted defeat for the first time in five Championship games at Cougar Park.
They looked set to go home empty-handed when Stu Sanderson’s touchline conversion from Ben Crooks’ late try hit the crossbar, but he rescued a point with an injury-time penalty.
The Dons had a fifth-minute try by winger Nev Morrison from stand-off Scott Spaven’s kick, disallowed for offside on the intervention of a touch judge. Playing down the slope and with the blustery wind, they continued to dominate the game territorially with Spavin varying his tactics well, and took the lead four minutes later - hooker Kyle Kesik spotting a gap and shooting over from 15 metres out for a try converted by Sanderson.
It took Keighley until the end of the first quarter to put any sort of pressure on the Doncaster line and it was against the run of play when they drew level on 23 minutes with a disputed converted try by centre James Hayley .
The visitors quickly regained the lead, the lively Richardson dummying his way into space and shooting over from 20 metres. Sanderson again added the extras to make it 12-6.
Keighley hit back and two converted tries by prop Scott Low, the second of which was also contested, saw them lead 18-12 at the break.
The Dons realistically needed to score first after the break and they did so on 45 minutes – Mark Castle barging over from close range for a try goaled by Sanderson.
The visitors regained the lead on 51 minutes when Morrison won the race to Wilkinson’s astute grubber kick to score in the corner.
Keighley drew level three minutes after capitalising on Doncaster’s failure to clear the danger from a kick through by Paul March.
They were back in front on the hour, Hayley pouncing from 10 metres after Morrison had dropped a high kick.
Keighley survived a spell of pressure before Jones broke Spaven’s tackle to help edge his side into a ten-point lead with 14 minutes on the clock.
Crooks broke clear down the left to send Sanderson over in the corner for an unconverted try on 69 minutes.
Keighley winger Richard Burnett sealed the Dons’ fate with a 75th minute converted try,
Hayley completed his hat-trick to give his side an 18-point lead.