After taking two draws from its first two games, including being held at home by Serbia in March, reigning European champion Portugal collected its first Group B victory at Rajko Mitic Stadium.
Goals from William Carvalho and Goncalo Guedes put Portugal in control but an injury to Barcelona full-back Semedo, who left the field after a heavy Aleksandar Kolarov challenge, appeared to disrupt its rhythm.
Nikola Milenkovic's first international goal prompted hope of a Serbia fightback but Ronaldo and Silva scored either side of Aleksandar Mitrovic's rocket with the result ensuring the visitors move up to second in the section.
Serbia skipper Kolarov rifled wide from an early warning shot, but a goalkeeping error from Marko Dmitrovic handed the visitors an easy opener three minutes before the break.
Fernandes floated in a right-wing cross with Dmitrovic clattering into defender Milenkovic and the ball squirting loose for Carvalho to slot into the gaping goal.
Ronaldo fired off target twice in quick succession after the restart, but the Juventus superstar combined with Fernandes to create Portugal's second goal in the 58th minute.
There was work to do for Guedes, who had recovered from an injury scare, but the Valencia forward cleverly jinked into space before lashing a superb drive across Dmitrovic.
Serbia hit back shortly after Semedo's injury, Milenkovic losing Danilo Pereira in the box to crash home a towering header from Dusan Tadic's left-wing corner.
Silva fed Ronaldo to beat Dmitrovic with a dinked finish, although replays showed had strayed offside, before Mitrovic's hammer of a finish, with Tadic again the creator, seemed to have set up a frantic finale.
However, Manchester City star Silva wrapped up the scoring with a low finish four minutes from time.
Portugal stays on the road for its next match, Santos' side travelling to Lithuania on Wednesday (AEST). On the same day, Serbia will play Luxembourg away.