Rennes won thanks to goals by Gaetan Laborde and Flavian Tait on each side of the interval to end PSG's eight-game winning run in the league.
PSG, beaten in the preseason trophy of champions by Lille, stayed top of the table with 24 points, six ahead of second-place RC Lens, who beat Stade de Reims 2-0 on Friday. Rennes moved up to seventh on 12 points.
Five days after an impressive win over Manchester City in the Champions League, with Messi scoring his first for the club, PSG got off to a lively start but lacked sharpness as Neymar skied a close-range attempt over the bar in the 22nd minute. Messi's 25-yard free kick crashed against the crossbar, and although he combined well with Neymar and Kylian Mbappe, the visitors struggled to break the deadlock.
Rennes, who had less than 72 hours to recuperate after beating Vitesse Arnhem in the Europa League on Thursday, went ahead on the stroke of half-time in clinical fashion. Laborde netted his sixth goal of the season by volleying home from Kamaldeen Sulemana's cross.
Having failed to manage a single shot on target in the first half, PSG were caught cold straight after the interval as Tait fired home from Laborde's cross.
Neymar was substituted by Mauro Icardi in the 76th minute, but the Argentine failed to inspire PSG, who also failed to muster a shot on target in the second half.
Rennes kept their composure in the closing stages as they handed PSG their first away league defeat for eight months.