Former Juventus player Stefano Sturaro curled in the opener in the 72nd minute before Goran Pandev netted a goal for the win with a powerful finish nine minutes from time.
"I expected a different Juventus," said coach Massimiliano Allegri referring to the 1-1 draw earlier in the season.
"We did not put in a good performance,” he added.
Juventus had last lost in the top flight on 22 April 2018 and this season had dropped points on only three occasions prior to Sunday's game.
The home side made a good start when Christian Kouame forced a good save from former Genoa goalkeeper Mattia Perin before they had penalty decision overturned by VAR. The video technology also overturned Juve striker Paulo Dybala's goal for an offside in the build-up.
Ronaldo, who scored a hat-trick in Juve's 3-2 aggregate win over Atletico Madrid in midweek, was left out of the match-day squad.
Juventus remain 18 points clear of second-placed Napoli and will play Udinese next.