Kendati tampil cukup menguasai jalannya pertandingan, Portugal baru bisa membuka keunggulan tiga menit jelang babak pertama usai lewat gol William Carvalho.
Carvalho sukses memanfaatkan miskomunikasi antara barisan pertahanan dan kiper Serbia demi mencuri bola dan menyarangkannya ke dalam gawang dari jarak dekat.
Keunggulan itu berganda pada menit ke-58 lewat aksi menawan Goncalo Guedes yang menerima bola umpan Bruno Fernandes, melewati hadangan bek Serbia dan melepaskan tembakan ke area tiang jauh untuk mengubah skor menjadi 2-0.
Serbia, yang tak pernah kalah di kandang sejak Oktober 2015, berusaha menjaga catatan tersebut dan pada menit ke-68 berhasil memperkecil ketertinggalan menjadi 1-2 lewat tandukan Nikola Milenkovic menyambut sepak pojok Dusan Tadic.
Gol tersebut hampir disusul cepat ketika Adem Ljajic melepaskan tembakan jarak jauh namun kiper Rui Patricio menepisnya.
Portugal kembali merestorasi keunggulan dua gol pada menit ke-80 ketika Cristiano Ronaldo berhasil mengecoh kiper Marko Dmitrovic dengan tembakan lambungnya usai menyambut umpan kiriman Bernardo Silva.
Serbia kembali memangkas jarak ketertinggalan lima menit kemudian lewat tembakan sudut sempit Aleksandar Mitrovic, namun semenit berselang Portugal kembali membalas lewat Silva mencetak gol keempat tim tamu demi memastikan kemenangan 4-2.
Kemenangan perdana Portugal hadir sembari menyudahi catatan tak terkalahkan Serbia dalam kandang.
Hasil itu membuat Portugal kini naik ke urutan kedua klasemen dengan koleksi lima poin, terpaut delapan poin dari Ukraina (13) yang di laga lain menang telak 3-0 di kandang Lithuania (1).
Berikut hasil pertandingan kualifikasi Piala Eropa 2020 Grup B pekan kelima (tuan rumah disebut pertama):
Lithuania 0 - Ukraina 3 (Olexandr Zinchenko 7', Marlos 27', Ruslan Malinovskiy 61')
Serbia 2 - Portugal 4 (Nikola Milenkovic 68', Aleksandar Mitrovic 85'; William Carvalho 42', Goncalo Guedes 58', Cristiano Ronaldo 80', Bernardo Silva 86')
Klasemen Grup B
Tim | M | M | I | K | Gol | P | |
1 | Ukraina | 5 | 4 | 1 | 0 | 11-1 | 13 |
2 | Portugal | 3 | 1 | 2 | 0 | 5-3 | 5 |
3 | Luksembourg | 4 | 1 | 1 | 2 | 4-5 | 4 |
4 | Serbia | 4 | 1 | 1 | 2 | 7-11 | 4 |
5 | Lithuania | 4 | 0 | 1 | 3 | 3-10 | 1 |