Italien hade tre bollar i nät.
Två av dem godkändes, efter att Leonardo Bonuccis tidiga ledningsmål blev bortdömt efter VAR-granskning.
Men det räckte för att Italien skulle ta sig vidare till semifinal.
Nicolo Barella sköt 1-0 i 31:a minuten, efter belgiskt försvarsschabbel.
Men det var 2-0-målet som alla pratade om efteråt.
Napolis Lorenzo Insigne tog fart, och sköt 2-0 med ett vackert skott förbi belgiske målvakten Courtois. Men Belgien kom tillbaka och fick också utdelning.
Omdiskuterad straff
Jeremy Doku utmanade och gick omkull i straffområdet strax före paus, och domaren Slavko Vincic pekade på straffpunkten.
Något som kritiserades av SVT-experten Jonas Eriksson.
– Det bästa beslutet hade varit att inte blåsa straff. Jag tycker den är extremt billig. Visst det är kontakt och ett mått av dåligt förvarsspel. Jag tycker det är felaktigt, säger han.
Från elva meter var dock Romelu Lukaku säkerheten själv.
2-1 och matchen levde i allra högsta grad efter 45 minuter.
Belgien satte in en desperat jakt på kvittering i den andra halvleken.
Chanserna kom också. Men missades.
Kevin De Bruyne kom igenom i straffområdet med en halvtimme kvar att spela och hittade Lukaku som hade i princip öppet mål.
Möter Spanien i semifinal
Men italienske försvararen Leonardo Spinazzola fick ett lår på bollen, och styrde den till hörna.
Belgien fortsatte trycka på. Men Italien spelade som Italien gör i ledning.
Och Belgien kunde aldrig forcera den italienska försvarsmuren med målvakten Gianluigi Donnarumma i spetsen.
Italien spelar semifinal mot Spanien.
Belgien får åka hem.