Substitute Stefano Sturaro, who was sold by Juventus in January after a lengthy injury spell, scored two minutes after coming off the bench for his Genoa debut and Goran Pandev sealed the result.
It was Juve’s first league defeat since April but the Bianconeri still have a commanding advantage at the top of the table. They are 18 points ahead of second-placed Napoli, which hosts Udinese later.
Genoa moved 10 points ahead of the relegation zone.
Ronaldo wasn’t even included in the squad because the 34-year-old was given a rest following Tuesday’s hat trick against Atletico Madrid that saw Juventus overturn a first-leg deficit to reach the Champions League quarterfinals.
Several other Juventus players were also rested.
Genoa was awarded a penalty after half an hour for a Joao Cancelo handball but the referee revoked the decision after viewing the incident on the pitchside monitor because it had initially come off a Genoa player’s arm.
Paulo Dybala thought he had given Juventus the lead early in the second half but the goal was ruled out for offside.
The goal eventually came in the 72nd minute from a player perhaps least expected to score as Sturaro curled in from the edge of the area for his first goal in more than three years.
Pandev drilled in Genoa’s second, nine minutes from time, to send the home fans wild.
AC Milan hosts Inter Milan later in a derby match with just a point separating the two sides, which are third and fourth, respectively.