Diogo Jota had seen his double cancelled out by Aleksandar Mitrovic and Filip Kostic, the former becoming Serbia's all-time leading scorer with his 39th international goal, at Rajko Mitic Stadium.
Portugal skipper Ronaldo was then convinced his last-gasp effort had crossed the line but the officials judged Stefan Mitrovic cleared before all of the ball had done so, with the Juventus superstar booked for his protestations before he angrily threw his captain's armband on the floor.
A Cristiano Ronaldo tantrum for the ages 😬— Optus Sport (@OptusSport) March 27, 2021
Portugal let a two goal lead slip against Serbia, and were denied a late winner in seriously controversial circumstances.
No VAR here. You be the judge. Did the ball cross the line? 🙃#WCQ #OptusSport pic.twitter.com/dFHE9FKW7v
Portugal coach Fernando Santos said "it isn't possible" that what he saw as a "clear goal" could be ruled out.
However, without VAR (video assistant referee) or goalline technology in use, officials decided that Mitrovic had cleared the ball before it crossed the line even though images appeared to show the goal should have stood.
"We scored a goal that was not given when the ball went in," Santos told Portuguese broadcaster RTP.
"In a match of this level, that isn't possible."
It means both Portugal and Serbia, which had Nikola Milenkovic sent off prior to the late drama, each have four points – one more than Luxembourg, who sealed a remarkable 1-0 win against Republic of Ireland.
Dynamo Kiev midfielder Gerson Rodrigues condemned the hosts to a second defeat in as many Group A games with a superb long-range effort five minutes from time.
Republic of Ireland now sits bottom of the group on zero points, four behind Serbia and Portugal after their draw in Belgrade.