First-half tries from Scott Barrett and Johnny McNicholl helped the visitors into a 23-7 lead but Malakai Fekitoa's try and Lima Sopoaga's penalty cut the gap to six points with nearly 10 minutes remaining.
Colin Slade's fourth penalty took the Crusaders out of reach and all the Highlanders could manage was a losing bonus point after Sopoaga split the posts again.
Slade opened the scoring in the 17th minute with a penalty after being tackled by Fekitoa from an offside position.
Aaron Smith dummied over from close range and Sopoaga converted as the Highlanders led for the only time in the game at 7-3.
Crusaders flanker Richie McCaw was denied a try when the television match official ruled he had been held up over the line but his side were still behind for only six minutes before Scott Barrett crashed over and Slade converted.
Another penalty made it 13-7 and Slade then converted on the stroke of half-time after wing McNicholl went over in the corner.
It was 23-7 after a 52nd-minute penalty from Slade but the home side surged back in the final 20 minutes.
Fekitoa sparked them into life by bursting under the posts, Sopoaga converting and adding a penalty to bring them within one score.
It would have been easy for the Crusaders to let it slip, and Luke Whitelock's knock-on cost them a chance to put the game to bed, but when Josh Bekhuis infringed at a ruck Slade extended the lead back to nine points with two minutes left.
The Highlanders did not give up and they got some reward when they forced a penalty at a ruck and Sopoaga did the necessary, at least earning them a point from a hard-fought game.