Dyfarnwyd cic o'r smotyn i'r Ffrancwyr 33 munud, pan gafodd Thierry Henry ei faglu gan Ricardo Carvalho yn y cwrt cosbi.
Er i golwr Portiwgal, Ricardo ddyfalu'n gywir, profodd ergyd Zidane yn rhy gryf iddo.
Cafodd Henry a Franck Ribery gyfleoedd i ymestyn mantais Ffrainc.
Gwelodd Luis Figo a Deco eu hergydion yn cael eu harbed gan Fabien Barthez, ac fe beniodd Figo dros y trawst yn hwyr yn y gêm.
Roedd perfformiad Portiwgal yn un siomedig, ac nid ydynt wedi curo Ffrainc ers 1975.
Dyma oedd y tro cyntaf i Luiz Felipe Scolari golli fel hyfforddwr yng Nghwpan y Byd, ac yntau wedi arwain Brasil i fuddugoliaeth bedair blynedd yn ôl.
Roedd ei siom a'i ddicter yn amlwg ar ddiwedd y gêm wrth iddo ddadlau gyda'r dyfarnwr.
Ond roedd y Ffrancwyr yn llawn haeddu eu buddugoliaeth, gan sicrhau eu lle yn y rownd derfynol am yr eildro.
Byddant yn wynebu'r Eidal yn yr Olympiastadion yn Berlin nos Sul, gêm fydd yn nodi ymddangosiad olaf Zidane.
TIMAU
Portiwgal: Ricardo, Miguel (Paulo Ferreira), Carvalho, Meira, Valente, Costinha (Postiga), Maniche, Deco, Figo, Ronaldo, Pauleta (Simao).
Eilyddion: Boa Morte, Caneira, Nuno Gomes, Paulo Santos, Quim, Ricardo Costa, Tiago, Viana.
Ffrainc: Barthez, Sagnol, Thuram, Gallas, Abidal, Vieira, Makelele, Ribery (Govou), Zidane, Malouda (Wiltord), Henry (Saha).
Eilyddion: Boumsong, Chimbonda, Coupet, Dhorasoo, Diarra, Givet, Landreau, Silvestre, Trezeguet.
Dyfarnwr: Jorge Larrionda (Uruguay).