Cenk Tosun scored twice as Besiktas made it three wins from three in Group G of the Champions League and piled pressure on Monaco with a 2-1 win at the Stade Louis II.
The visitors were a little unlucky to have a goal ruled out for offside early on and then saw Pepe escape a red card for a foul on Keita Balde when he was the last man.
Monaco duly moved ahead through Radamel Falcao on the half-hour, but the lead lasted just four minutes before Tosun's header made it 1-1.
Tosun added a second nine minutes after the break to maintain his side's perfect start to the competition. Monaco, semi-finalists last season, now have just one point from three games and face an uphill battle to qualify from a group that also features Porto and RB Leipzig.
Besiktas started the game confidently, looking very much like a side that won their opening two matches, and had the ball in the back of the net early on.
Balde was dispossessed on the edge of the Besiktas box, allowing the visitors to break. Tosun's shot then deflected into the path of Ryan Babel, who slotted home only for the goal to be ruled out for offside.
A curling free-kick from Thomas Lemar forced Besiktas goalkeeper Fabri into a fine one-handed save at the other end, after Pepe had perhaps been fortunate only to receive a yellow card for bringing down a surging Balde.
The chances continued to flow, Danijel Subasic diving low to save from Besiktas’ Atiba Hutchinson before Falcao fired a scuffed shot into the side-netting for Monaco.
The deadlock was eventually broken just after the half-hour mark. Another Balde charge ended with him slipping in Falcao, who cut inside, beating Pepe, before poking past Fabri.
Yet Monaco’s lead lasted just four minutes, as Besiktas levelled through Tosun. Talisca started the move before spreading the play out wide to the right, and Ricardo Quaresma's precision cross was thumped home by the striker.
Besiktas then went ahead early in the second half after some great attacking play. Tolgay Arslan's shot smashed off the base of Subasic's left-hand post and fell invitingly for Babel. He squared the ball and Tosun fired home his second of the game.
Leonardo Jardim responded immediately, sending on Rony Lopes for the ineffective Youri Tielemans. The substitute almost made an immediate impression, setting up an unmarked Balde in the box, only for the forward to miss his shot, the ball hitting his standing leg as the chance went begging.
Having gone behind, the hosts' confidence seemed to disappear and although they pushed forward in an attempt to find an equaliser, they struggled to create chances against a disciplined and determined Besiktas.
The better opportunities continued to fall to the visitors, with Tosun getting the better of Kamil Glik but failing to beat Subasic, who saved well to deny the Besiktas man his hat-trick.
Monaco pressed in the final stages but could not find a way past Fabri, as Besiktas held for for another impressive victory to leave them top of the group with maximum points after three games.