Nantes had led thanks to a stunning early strike by United States international Alejandro Bedoya, but Ibrahimovic equalised before the interval and then got what proved to be the winner with a ferocious free-kick three minutes after the restart.
The result maintained PSG’s unbeaten record this season — the only one left in Europe’s leading leagues after Premier League leaders Chelsea lost earlier in the day — and allowed the defending champions to move provisionally two points clear at the top of Ligue 1 before rivals Marseille host Metz on Sunday night.
Laurent Blanc’s side had been held at Lille in midweek but they bounced back to make it just one defeat in their last 39 home league games despite several leading players being rested ahead of Wednesday’s Champions League clash with Barcelona.
Scorer of eight goals in his last nine games, Edinson Cavani was left on the bench at kick-off along with David Luiz and Blaise Matuidi, and it was Nantes who started the game better.
The Canaries started the day in eighth place after back-to-back defeats had seen them slip down the table, but they opened the scoring just eight minutes in.
Paris lost possession inside their own half and the ball eventually came to Bedoya, who took a touch 25 yards from goal before arrowing a superb shot across Salvatore Sirigu into the top left-hand corner of the net for his first goal of the season.
Nantes were looking for their first win at the Parc des Princes since 2002 and were unlucky not to be further in front in the 12th minute when Papy Djilobodji turned in a Jordan Veretout free-kick only for the referee to disallow the goal for a foul that was not clearly visible even with the help of several replays.
That proved to be a turning point as PSG slowly grew into the game and drew level on 34 minutes, Ibrahimovic getting in front of his marker to convert a low ball in from the right by Lucas.
Thiago Silva then came close to putting the hosts ahead on the stroke of half-time with a header from Ezequiel Lavezzi’s free-kick that was well saved by Remy Riou.
However, Ibrahimovic struck again on 48 minutes, his thunderous dead-ball hit from 25 yards taking an identical trajectory to Bedoya’s earlier effort on its way into the net.
It was the Swede’s eighth league goal of the campaign and it proved enough to secure the points, although Lucas and Lavezzi both passed up opportunities to increase the advantage.
Later on Saturday, Saint-Etienne will look to extend a 10-game unbeaten run in all competitions when they entertain bottom club Bastia and Rennes host Montpellier chasing a fifth successive win.
On Friday, veteran Bulgarian Dimitar Berbatov scored twice, including once from the penalty spot, as Monaco won 2-0 at Toulouse to warm up perfectly for Tuesday’s home Champions League clash with Zenit St Petersburg, in which a draw will be enough to take them through to the last 16.