A superb first-half display by Belgium ended Brazil's hopes of a record sixth World Cup crown as a Fernandinho own goal and a superb Kevin De Bruyne strike proved enough to win 2-1 and seal a semi-final spot.
Although Brazil roared back in the second half with a headed goal from Renato Augusto, it is the Belgians who will face France in Saint Petersburg on Tuesday.
Unbeaten in their last 15 games, Brazil's bid for a second consecutive place in the semi-finals looked in safe hands.
But after an energetic start that saw Thiago Silva come close and Neymar show early promise, Brazil heads went down following Fernandinho's own goal before De Bruyne's superb strike from distance put the Red Devils in control on 31 minutes.
Late changes by Brazil coach Tite paid off as Renato Augusto's superb header 14 minutes from time dragged the South Americans back into contention.
But as Belgian legs tired, Brazil spurned several great chances to push the match into extra-time, Augusto drilling inches wide and Coutinho skewing his effort off target from Neymar's pass.
Courtois produced a great save in the dying minutes, tipping over a curling drive from Neymar as the Belgians ensured they will make just their second visit to the last four, 32 years after their surge to semis in Mexico.
- Red surge -
On eight minutes Courtois was flapping when Neymar's corner was flicked on by Joao Miranda, came off the thigh of Thiago Silva and then off the post.
Tite had replaced suspended holding midfielder Casemiro with Fernandinho in his starting line-up, handing the Manchester City player his first World Cup start since he was hauled off at half-time on Brazil's way to the humiliating 7-1 semi-final defeat to Germany in 2014.
Fernandinho's World Cup woes continued, Hazard's corner coming off the midfielder's arm to glide past Alisson and into the net as he rose to block.
Brazil almost equalised immediately, Neymar dribbling down the left and finding Gabriel, only for his effort to go amiss.
But Belgium's early opener showed the Red Devils were oozing confidence, Hazard and De Bruyne linking incisively to carve open the Selecao's well-oiled defence with surprising ease.
On 21 minutes De Bruyne set up Hazard on a free run inside to set up Thomas Meunier, only for Miranda to block his intended cross for Lukaku.
A minute later De Bruyne found Lukaku in acres of space, the big striker coolly nutmegging Miranda before seeing the ball frantically cleared into the stands.
Superb control from Marcelo saw the Real Madrid defender chest down, cut inside and unleash a low drive that Courtois did well to block.
But when Belgium countered on the half hour, it was with devastating effect.
Lukaku looked invincible as he powered through Brazil's midfield before finding De Bruyne in space on the right.
The Manchester City ace had time to pick his spot before unleashing a right-footed drive that screamed past Alisson and inside the 'keeper's far post.
Tite replaced the ineffective Willian with Roberto Firmino at half-time and soon after changed Jesus for Douglas Costa.
But it took the arrival of China-based Augusto 17 minutes from time that sparked Brazil into life.
Brazil saw two penalty claims in quick succession waved away by Serbian referee Milorad Mazic after Neymar tumbled the following contact with Fellaini and Gabriel went to ground after a challenge from Vincent Kompany.
De Bruyne released Hazard down the left but he firing narrowly wide of Alisson's far post as Lukaku waited to pounce.
Minutes later Augusto hung in the air to meet Coutinho's perfectly-weighted cross and direct it past Courtois to spark celebrations among the Brazilian fans in Kazan.
But he drilled inches wide minutes later, one of several misses that Brazil made to regret.