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.

Analysis

"It was a fantastic occasion and a great game. Not in terms of quality but in terms of endeavour and passion.
"The game was scrappy and bitty but Brazil wanted it that little bit more. Colombia were overawed from the beginning and lost the game after conceding the first goal.
"The South American way is win at all costs and you saw that today. Yes, they gave away fouls, yes David Luiz was trying to put James Rodriguez off for the penalty, but if Brazil win this World Cup playing like that nobody will be bothered.
"If they lose, different story."
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.

Match facts

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.
Play media
Brazil's David Luiz scores a brilliant free-kick against Colombia
Brazil's David Luiz scores brilliant free-kick
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
Brazil captain Thiago Silva
Brazil captain Thiago Silva celebates his opening goal with team-mate Paulinho
Spanish referee Carlos Velasco Carballo
Referee Carlos Velasco Carballo separates both sets of players after Fernandinho fells Rodriguez
Brazil defender David Luiz
Brazil defender Luiz scores a brilliant long range free-kick to put Brazil 2-0 up
Colombia forward James Rodriguez
Colombia forward Rodriguez runs back to the halfway line after converting from the penalty spot
Brazil forward Neymar
Brazil forward Neymar leaves the pitch on a stretcher after taking a knee in the back from Juan Zuniga
Brazil defender David Luiz consoles Colombia striker James Rodriguez
Luiz consoles Rodriguez after the full-time whistle

LINEUP, BOOKINGS (4) & SUBSTITUTIONS (6)

Brazil

  • 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' )

Substitutes

  • 01 Jefferson
  • 02 Dani Alves
  • 13 Dante
  • 14 Maxwell
  • 15 Henrique
  • 16 Ramires
  • 18 Hernanes
  • 19 Willian
  • 20 Bernard
  • 21 Jô
  • 22 Victor

Colombia

  • 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' )

Substitutes

  • 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
Att: 60,342

MATCH STATS

Possession49%51%90minsBrazilColombia

Shots

1311

On target

52

Corners

46

Fouls

3123

Live Text Commentary

Full time
Full TimeMatch ends, Brazil 2, Colombia 1.
90:00+5:00Full time
Full TimeSecond Half ends, Brazil 2, Colombia 1.
90:00+4:48
Ramires (Brazil) wins a free kick on the right wing.
90:00+4:48
Foul by Cristian Zapata (Colombia).
90:00+4:07
Attempt missed. Adrián Ramos (Colombia) header from the centre of the box is too high. Assisted by Juan Quintero with a cross following a set piece situation.
90:00+3:33
Foul by Hernanes (Brazil).
90:00+3:33
Juan Zuñiga (Colombia) wins a free kick on the right wing.
90:00+3:07
Foul by Fred (Brazil).
90:00+3:07
Carlos Sánchez (Colombia) wins a free kick in the defensive half.
90:00+2:03
Attempt missed. Adrián Ramos (Colombia) header from the centre of the box misses to the left. Assisted by James Rodríguez with a cross following a corner.
90:00+1:48
Corner, Colombia. Conceded by Marcelo.
89:10
Marcelo (Brazil) wins a free kick in the defensive half.
89:10
Foul by James Rodríguez (Colombia).
88:42
Attempt blocked. Carlos Bacca (Colombia) right footed shot from outside the box is blocked. Assisted by Carlos Sánchez.
87:45
Delay over. They are ready to continue.
87:43Substitution
SubstitutionSubstitution, Brazil. Henrique replaces Neymar because of an injury.
86:51
Delay in match Neymar (Brazil) because of an injury.
86:05
Oscar (Brazil) wins a free kick on the left wing.
86:05
Foul by Juan Quintero (Colombia).
85:32Substitution
SubstitutionSubstitution, Brazil. Hernanes replaces Paulinho
.