Stade Rennes's Jires Ekoko got his first goal of the season in the fifth minute after a defensive error by Lyon's Brazilian captain Cris to put the home side ahead.
The Brittany outfit should have wrapped up the points in the first half after outmuscling Lyon despite Swedish international Kim Kallstrom hitting the post in the dying seconds of the half.
Under-fire Lyon coach Claude Puel would have been relieved to see Brazilian midfielder Michel Bastos's deflected free-kick hit the back of the net in the 53rd minute for the equaliser.
"We're building mentally and collectively. We aren't composed enough yet but the team are reacting and things are not far from naturally falling into place," Puel said.
Former French champions Lyon, unbeaten in their last four league games, are in 10th place on 16 points.
Earlier, two goals from Arles Avignon's Guinea striker Kaba Diawara gave the basement club their first league win of the season as they beat Caen 3-2.
Promoted Arles continued their improved form since ex-Bosnia coach Faruk Hadzibegic took over at the start of October. After losing their first eight matches, they now have five points from 12 games, five adrift of RC Lens.
Former Arsenal and Marseille striker Diawara scored with a header and then converted a penalty - his first goals in more than four years - to give Arles the points after Gael Germany got the southerners' first goal.
"We suffered a lot, but we deserved the win," Hadzibegic said. "Caen played well, but that's football."
Caen's Youssef El Arabi notched his eighth of the campaign after 10 minutes to give the visitors the lead and join Saint Etienne's Dimitri Payet as the league's top scorer.
Saint Etienne dropped to fifth following a 2-1 home defeat by L'Orient after Kevin Gameiro scored his second goal of the match with eight minutes left.
The French international took his tally to six for the season and the win lifted L'Orient to seventh with 17 points.
Mid-table Girondins Bordeaux's topsy-turvy form since Jean Tigana took over from France coach Laurent Blanc at the start of the season continued with a 1-1 draw at home to Valenciennes.
The visitors struck first when David Ducourtioux swept the ball home in the 17th minute after taking advantage of a lapse in concentration by Bordeaux's defence.
Bordeaux's Jussie missed a penalty and their French under-21 international Anthony Modeste smashed a volley against the bar before Niger forward Ouwo Maazou secured a point in the 86th.
"We had a terrible first half and while the second half was worthy of Bordeaux we just couldn't make the difference," said the home side's Brazilian midfielder Fernando.
Auxerre's Frederic Sammaritano got his second goal of the week in a 1-1 draw at Sochaux having scored in their 2-1 Champions League win over Ajax Amsterdam on Wednesday.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.