Captain Thiago Silva set Luiz Felipe Scolari's side on the way with an early goal, and Brazil looked to be set for a comfortable passage into the last four after David Luiz's brilliant second-half free-kick.
In a magnificent atmosphere built on a cascade of colour and a wall of sound, new World Cup star James Rodriguez set up a thrilling finale when he pulled a goal back from the penalty spot with 10 minutes left.
In a frantic closing phase, Colombia were unable to force the chance that could have brought extra time, and it is the hosts who will meet Germany in Belo Horizonte on Tuesday, a game which will be live on BBC One.
But Brazil will be without superstar and main striking hope Neymar, who has been ruled out of the World Cup with a fractured vertebra after being kneed in the back by Juan Zuniga.
They will also be missing captain Thiago Silva, who is suspended after being booked.
Colombia had complaints of their own, chiefly the lack of protection offered to Rodriguez, who was on the receiving end of some fierce challenges as Brazil sought to nullify his influence.
He broke down in tears at the final whistle as he was consoled by the Brazil players who had offered him none of that commodity during a harrowing physical ordeal which proved he has the courage to go with his natural ability.
Brazil and their supporters, in contrast, went wild with elation at the final whistle. The goal of reaching the final - and making up for the 1950 World Cup loss to Uruguay in Rio that is still one of this nation's darkest sporting days - lives on.
Germany, who beat France 1-0 in their quarter-final, will need to show mental strength to cope with the tidal wave of emotion and support that Scolari hopes will carry Brazil to the Maracana a week on Sunday.
Fortaleza offered up a cauldron of noise and a sea of yellow shirts in an atmosphere that ensured Brazil would launch into a series of adrenalin-fuelled attacks.
Scolari's hope was to push Colombia into unknown territory and the strategy was helped by a goal built largely on defensive carelessness after seven minutes.
Neymar's corner was a routine affair with little serious menace but it was allowed to drift to the far post, where Carlos Sanchez switched off to allow Silva to bundle home.
Brazil are unbeaten in 41 successive home matches, with their last defeat coming against Paraguay in August 2002.
Colombia had won just two of their 26 previous games against Brazil and have never defeated them on Brazilian soil.
Thiago Silva's seventh-minute opening goal was Brazil's quickest at a World Cup since Ronaldo scored in the fifth minute against Ghana in 2006.
Colombia's James Rodriguez has scored in each of his past seven appearances for his country. His penalty was his sixth goal in the World Cup.
David Luiz's goal in the 68th minute was his side's first attempt of the second half. It was also his first shot of the match.
This game saw more fouls committed than any match at this tournament so far (54; previous most was 51 during Brazil v Chile).
Scolari and his players were just as aware of the threat posed by Juan Cuadrado as the celebrated Rodriguez, and he illustrated exactly why with a shot that was inches away from 20 yards.
This was much more like it from Brazil, though, and it would have been no surprise had they extended their advantage by the interval as they showed genuine threat against a somewhat timid Colombian side.
It was down to keeper David Ospina that they did not as he twice saved well from the excellent Hulk, on the second occasion recovering well to then clutch Oscar's long-range effort.
Scolari insisted Brazil had formulated no special plans to deal with Rodriguez, but it was clear they were determined to test the 22-year-old in a succession of reckless physical challenges.
It was after Rodriguez was shown a yellow card for a foul on Hulk by the extraordinarily lenient referee Carlos Velasco Carballo that Brazil scored the goal that effectively sent them into the last four.
Luiz came in off his long run to strike a 25-yard free-kick that left the stretching Ospina clutching at thin air as it flew high to his left.
The vast bowl of a stadium reverberated to an expression of relief as well as celebration.
It came just after Colombia thought they were back in the game, only to see Mario Yepes's goal ruled out for an earlier offside.
To his credit, Rodriguez was undeterred by Brazil's close attentions and it was his astute pass that led to substitute Carlos Bacca being upended by Julio Cesar. After a short delay, and some well-chosen words from Luiz, Rodriguez was calmness personified to send the keeper the wrong way.
Colombia threw everything forward in the last moments, but once again Brazil held on to seal the victory.
Brazil v Germany will be live on BBC One on Tuesday, 8 July from 20:30 BST
- 12 Julio César Booked
- 23 Maicon
- 06 Marcelo
- 08 Paulinho (Hernanes - 86' )
- 03 Thiago Silva Booked
- 04 David Luiz
- 10 Neymar (Henrique - 88' )
- 05 Fernandinho
- 09 Fred
- 11 Oscar
- 07 Hulk (Ramires - 83' )
- 01 Jefferson
- 02 Dani Alves
- 13 Dante
- 14 Maxwell
- 15 Henrique
- 16 Ramires
- 18 Hernanes
- 19 Willian
- 20 Bernard
- 21 Jô
- 22 Victor
- 01 Ospina
- 18 Zuñiga
- 07 Armero
- 06 Sánchez
- 02 Zapata
- 03 Yepes Booked
- 11 Cuadrado (Quintero - 80' )
- 13 Guarín
- 09 Gutiérrez (Bacca - 70' )
- 10 Rodríguez Booked
- 14 Ibarbo (Ramos - 45' )
- 04 Arias
- 05 Carbonero
- 08 Aguilar
- 12 Vargas
- 15 Mejía
- 16 Balanta
- 17 Bacca
- 19 Ramos
- 20 Quintero
- 21 Martínez
- 22 Mondragón
- 23 Valdés
Ref: Carlos Velasco Carballo