Yates sat on Porte’s wheel for the whole final kilometre, ensuring the Australian led-out the sprint before coming around his wheel with 100 metres to go to sprint to victory.
He leads Porte by 19 seconds overall, with just tomorrow’s time-trial remaining.
It was a less successful day for Yates’ British compatriot Chris Froome (Team Sky), however, who was dropped on the day’s final climb and finished behind the group of favourites.
On a day which saw the return of sunshine – albeit with the adverse weather of recent days still in evidence through the snow that lay on the roadside – Yates engineered his victory with a crafty attack on the stage’s penultimate climb.
Although Froome had marked an attack moments earlier by Ilnur Zakarin (Katusha-Alpecin), when Yates counter-attacked he was allowed to head up the road on his own.
The Bury-born rider worked his way through the remnants of the day’s break, before joining the lead group which consisted of eight riders at the foot of the final climb – Yates himself, Sander Armee (Lotto Soudal), Simon Clarke (Cannondale-Drapac), Mikael Cherel (Ag2r-La Mondiale) and Pavel Kochetkov (Katusha-Alpecin) (the last survivors of the day’s break), plus Emanuel Buchmann (Bora-Hansgrohe), Anass Ait El Abdia (Team UAE Emirates) and Rein Taaramae (Katusha-Alpecin) who had joined the break later.
Yates, Buchman and El Abdia briskly dropped the other riders on the final climb, but only Yates could follow when Porte caught up to them having attacked from the peloton, and the two worked well together to make it to the finish line ahead.
Porte made his attack in response to the development that Froome had fallen off the back of the peloton. At first it seemed Froome was approaching the climb by intentionally choosing to hold back and not follow the pace, as has become a trademark of his. But, despite narrowing the gap from him to the peloton near the summit, the fact he still finished behind the group of favourites confirms he was not feeling on good form.
Overnight leader Fabio Felline (Trek-Segafredo) did a fine job to stay in touch with that main peloton, but still lost enough time to slip to fourth overall behind Yates and Porte.
The 2017 Tour de Romandie concludes on Sunday with a 18.3-kilometre individual time trial around Lausanne.
Tour de Romandie 2017, stage four: Domdidier to Leysin, 163.5km
1. Simon Yates (GBr) Orica-Scott
2. Richie Porte (Aus) BMC Racing, at same time
3. Emanuel Buchmann (Ger) Bora-Hansgrohe, at 30 secs
4. Tejay van Garderen (USA) BMC Racing, at 43 secs
5. Rigoberto Uran (Col) Cannondale-Drapac, at 52 secs
6. Diego Ulissi (Ita) UAE Team Emirates
7. Pierre Latour (Fra) Ag2r La Mondiale
8. Louis Meintjes (RSA) UAE Team Emirates
9. Damien Howson (Aus) Orica-Scott
10. David Gaudu (Fra) FDJ, at same time
General classification after stage four
1. Simon Yates (GBr) Orica-Scott
2. Richie Porte (Aus) BMC Racing, at 19 secs
3. Emanuel Buchmann (Ger) Bora-Hansgrohe, at 38 secs
4. Fabio Felline (Ita) Trek-Segafredo, at 44 secs
5. Primoz Roglic (Slo) LottoNL-Jumbo, at 53 secs
6. Ion Izagirre (Esp) Bahrain-Merida, at 56 secs
7. Bob Jungels (Lux) Quick-Step Floors, at 56 secs
8. Diego Ulissi (Ita) UAE Team Emirates, at 58 secs
9. Damien Howson (Aus) Orica-Scott, at 59 secs
10. Jesus Herrada (Esp) Movistar, at 59 secs