The visitors kept their line intact for the best part of 60 minutes in what was a tenacious effort against the defending champions.
The wall was breached twice in the final quarter of the game, and Otago picked up a couple of late yellow cards which proved costly.
But the bonus point they secured for a close loss may well come in handy in the race for the playoffs.
The game exacted a heavy toll, though. In-form fullback Finn Hurley and leading lock Fabian Holland picked up injuries in the first half.
Otago winger Jona Nareki was at full stretch to bring down his Highlanders team-mate Jacob Ratumaitavuki-Kneepkens, who was threatening to scamper away for an 80m try when the Bulls attacked from inside their 22 early on.
The home side did manage to open the scoring but it was through a Josh Jacomb penalty.
Otago had an opportunity to reply quickly but opted to kick for touch instead and lost the lineout.
The visitors were not as accurate as they needed to be in the initial exchanges.
They did get a second chance thanks to a scrum penalty and this time they nailed the lineout.
The captain Christian Lio-Willie made a devastating charge. Holland carried it on and got within inches of the line.
But the try was scored out wide. Nareki collected a skip pass from Josh Whaanga and had the strength to muscle over in the corner.
Hurley, who has been in tremendous form, limped off midway through the half with a hip complaint.
Moments later Holland twisted his ankle and limped off soon after, while Taranaki lost their skipper Kaylum Boshier. He failed an HIA.
The Bulls regained the lead through a second penalty and were putting the makeshift Otago lineout under enormous pressure.
Second five Thomas Umaga-Jensen got himself over the ball and secured a critical turnover for Otago.
They went up field and Cameron Millar drilled a penalty.
He slotted another with the last act of the half to give his side an 11-6 lead.
Jacomb struck another penalty to cut the lead to two points early in the second stanza and the arm wrestle continued.
Taranaki first five Jayson Potroz, who brought up his 50th game for the Bulls, drilled a grubber into the corner and his forwards stole the lineout.
They could not crack the defence again and had to settle for a fourth penalty which gave them a short-lived lead.
Tighthead prop Saula Ma’u burrowed over from close range and Millar pushed the lead to six with the conversion.
But Otago succumbed to the pressure during the home stretch.
Lock Will Tucker picked up a yellow card for an infringement at the ruck and Ratumaitavuki-Kneepkens burst through a hole from close range moments later.
Taranaki replacement hooker Ricky Riccitelli was driven over with 12 minutes remaining.
Otago had late opportunities to steal the lead back but fumbled the ball a couple of times and the match slipped away.
Nareki copped a late yellow for a tip tackle.
NPC
The scores
Taranaki 22
Jacob Ratumaitavuki-Kneepkens, Ricky Riccitelli tries; Josh Jacomb 4 pen
Otago 18
Jona Nareki, Saula Ma’u tries; Cameron Millar 2 pen, con.
Halftime: 11-6 Otago