Brazil started strongly and, were it not for back-to-back offside calls, Neymar and Gabriel Jesus could have each found the net in the opening 10 minutes.
Marcelo was, unfortunately, the first casualty when he limped off the field after eight minutes and was replaced by Felipe Luis.
Serbia’s reliable threats Sergej Milinkovic-Savic, Aleksandar Kolarov and Aleksandar Mitrovic were sniffing around but were short of any openings.
However, it was Brazil who eventually went in front after Paulinho beat the high-defensive line to get there ahead of an on-rushing Stojkovic and poke the ball over the keeper and into the back of the net.
The goal set the tone for the match with halftime looming, as the Selecao’s control of possession reached second gear in Moscow.
It was becoming more pragmatic for the South Americans, and Neymar nearly put the icing on the cake with an attempted curler from outside the box but his effort flew wide.
Serbia made a bright start to the second-half and found their first shot on target on 55 minutes when Adam Llajic’s effort forced Miranda to clear over his own crossbar.
The best chance for the Serbians came on 60 minutes when Mitrovic found space unmarked to head an incoming cross but a block from Thiago Silva prevented him from finding the net.
It was fast becoming a battle between Mitrovic and Alisson, with the forward getting in a header from a cross out wide, but it went safely to the arms of the Brazilian shot-stopper.
Silva calmed the nerves for Brazil when he headed home the second goal of the game following a corner from Neymar on 68 minutes.
Luis believed it wasn’t over yet and fired in a shot from a crowded area hoping to make it three, but he was unable to find the target.
Another combination between Neymar and Gabriel Jesus in added time set up the former, who went one-on-one with Stojkovic but was unable to beat the keeper.
In the end, Brazil claimed three points on the night and will now face Mexico in the round of 16.