World champion Sagan pipped Alexander Kristoff on the line in a thrilling finish to the 209km ride from Moirans-en-Montagne to Bern, Switzerland overnight.
Norway’s Kristoff (Katusha) celebrated after crossing the line, but it was Slovak Sagan (Tinkoff) who grabbed the stage, strengthening his grip on the green jersey for the points classification with his third stage win.
Norwegian Sondre Holst Enger (IAM Cycling) took third place, while Matthews was fifth behind John Degenkolb of Germany.
Sagan now has 405 points to Briton Mark Cavendish’s 291 and looks set to win a fifth green jersey in Paris.
Chris Froome (Team Sky) retained the overall leader’s yellow jersey after finishing in the leading pack in a twisting course finale in the Swiss capital.
It was a mess of a finish… it was quite dangerous
Froome seems to be heading for a third Tour de France title, seemingly unchallenged as rivals fail to unsettle his well-oiled Team Sky machine – but try telling him that.
Monday’s headline in French sports daily L’Equipe claimed he was ‘Sans Rival’ (without a rival) with one block of racing in the Alps left before Sunday’s parade to the Champs Elysees.
But Froome has rubbished suggestions he has no rivals for the title ahead of what he described as four “very tricky” days.
“I don’t agree, I think other teams have said they’re going to attack this week in the Alps and I expect they will do,” he said after ‘ticking off’ the 16th stage.
“To say the Tour is won and I have no rival is rubbish,” he added. “A lot can happen in four days, all you need is one bad day in the mountains and you can lose minutes.”
Richie Porte crossed the line in 18th and the Australian remains seventh in the overall standings and 4min 27sec behind Froome.
“It was a mess of a finish. It was quite dangerous in that last 10km but the whole day was just so fast,” Porte said.
“I’m in good condition and it is a hard four-day block coming up after the rest day. I think I’ve got everything to play for now, I’m not too far off podium. It’s a big goal so bring it on.”
Fans, officials and riders observed a minute’s silence shortly before the start of the race, in memory of the victims of the Bastille Day attack in Nice.
Triple time trial world champion Tony Martin and his Etixx-Quick Step teammate Julian Alaphilippe, who was denied a possible stage win on Sunday because of a mechanical problem in the final descent, broke away early on.
The duo built a six-minute gap but Frenchman Alaphilippe ran out of steam 30km from the finish and German Martin was caught by the bunch 22.5km from the line.
Former world champion Rui Costa then jumped away from the pack but the Portuguese was reined in with 5km left in the streets of Bern.
Numerous turns and an uphill cobbled section split the peloton and Sagan was again the strongest in the final sprint.
Tuesday is a rest day ahead of four stages in the Alps.
Make your contribution to independent news
A donation of any size to InDaily goes directly to helping our journalists uncover the facts. South Australia needs more than one voice to guide it forward, and we’d truly appreciate your contribution. Please click below to donate to InDaily.