Teun Koopmeiners opened the scoring for the hosts before Mihajlo Cvetković equalised for Serbia. Substitute Joshua Zirkzee then restored the Netherlands' lead in the second half to secure three important points.
Koopmeiners gives Netherlands the lead
The Netherlands dominated possession early on and eventually broke the deadlock in the 31st minute.
Teun Koopmeiners found the far bottom corner with a free-kick that travelled through a crowded penalty area, giving the home side a 1-0 advantage.
Serbia responded quickly, however, and levelled the contest four minutes later.
Cvetković brings Serbia level
Mihajlo Cvetković equalised in the 35th minute after being played through by Aleksa Terzić.
The forward kept his composure to beat the Netherlands defence and make it 1-1 heading into half-time.
Netherlands head coach Xavi made a change at the break, bringing on Joshua Zirkzee for Mexx Meerdink.
Zirkzee restores Dutch advantage
The substitution proved decisive.
Zirkzee put the Netherlands back in front in the 72nd minute, finishing from close range after Tijjani Reijnders delivered the ball across the face of goal.
The Manchester United forward's finish proved to be the winner as the Netherlands held on for a 2-1 victory.
Netherlands climb to top of Group A2
The victory takes the Netherlands to the top of Group A2 after four matches.
The Dutch remain unbeaten in the competition, having previously drawn with Germany and Greece and defeated Serbia away from home.
Virgil van Dijk also marked his 100th international appearance during the match, adding another significant milestone to the Netherlands' victory.
Match summary
• Netherlands: Teun Koopmeiners 31', Joshua Zirkzee 72'
• Serbia: Mihajlo Cvetković 35'
The Netherlands will return to Nations League action in November when they face Greece before travelling to Germany for their final Group A2 fixture.
