The Algarve outfit opened the scoring in the 14th minute through Danish defender Per Kroldrup, before Federico Dionisi doubled the advantage midway through the second half.
Midfielder Hector Herrera pulled one back for Porto eight minutes from time, but the hosts hung on to claim the points.
That victory sees Olhanense leapfrog Pacos de Ferreira, who drew 0-0 at Rio Ave, into the relegation play-off spot on goal difference.
Belenenses are just a point further ahead following a 1-1 draw at Estoril.
Brazilian attacker Deyverson struck in the 19th minute to give the visitors the lead, which they had the chance to double when Estoril goalkeeper Ricardo Ribeiro was sent off after conceding a penalty for a foul on Miguel Rosa.
However, Fernando Ferreira's spot-kick was saved by substitute keeper Joao Manuel, and Estoril earned a point in the 52nd minute as midfielder Evandro converted a penalty after Joao Alfonso saw red for handling in the area.
Champions Benfica were held to a 1-1 draw by Vitoria Setubal, who claimed a share of the spoils when forward Rafael Martins scored from the spot to cancel out Andre Gomes' opener.
A game between sides with little to play for was arguably most notable for the Benfica players opting to dye their hair red and paint emblems commemorating the club's 33rd league title on their faces.
An 89th minute Andre Ferreira strike gave Maritimo a 1-1 draw against Sporting Braga, while Pacos' draw means that Gil Vicente are safe despite a 1-0 loss at Arouca in an ill-tempered clash.
Gil Vicente had defender Cesar Peixoto sent off in the 58th minute, with Arouca hanging on despite the late dismissals of defenders Diego and Miguel Oliveira.
Elsewhere, Academica drew 0-0 with Vitoria Guimaraes.
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.