Sporting, who sit five points behind the reigning champions in second, could have moved to the top of the table with victory.
But they were behind as early as the 11th minute, after Josue converted from the penalty spot.
William did equalise on the hour mark, but parity lasted just two minutes, as Danilo restored Porto's advantage.
And Lucho Gonzalez sealed the win with Porto's third goal 16 minutes from time.
The result means Porto have dropped just two points from their opening eight league fixtures, while defeat for Sporting ended their unbeaten start to the season.
Their defeat meant Benfica moved level on points with them, after Jorge Jesus' men posted a 2-0 home win over Nacional.
Guilherme Siqueira fired Benfica in front after 15 minutes, before Oscar Cardozo sealed the win four minutes after the break.
Benfica are now unbeaten in seven league matches following their opening day loss to Maritimo.
Elsewhere, Estoril climbed to fourth in the table, three points behind Benfica and Sporting, with a 3-1 win at 10-man Maritimo.
Javier Balboa gave Estoril the lead after 12 minutes, but they were pegged back by a Heldon penalty 10 minutes later.
The hosts were then dealt a blow when Theo Weeks was dismissed a minute before the break, and Estoril made use of the numerical advantage in the second half.
Luis Leal gave them the lead for a second time in the 62nd minute, and Seba made the game safe seven minutes later as struggling Maritimo were consigned to their fourth successive defeat.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.