Before 2004, Porto's last triumph in the competition had been in 1987 – although they had won the UEFA Cup the previous season – while Monaco were playing in their first ever Champions League final. Both teams started their UEFA Champions League campaigns in the group stage and defeated former European champions on their way to the final. Porto beat 1968 and 1999 winners Manchester United while Monaco defeated nine-time champions Real Madrid.
AS Monaco finished second in the French Ligue 1 the previous season, meaning that they entered the Champions League at the group stage. They were placed in Group C, alongside Deportivo La Coruña, PSV Eindhoven and AEK Athens. After a 2–1 in their first win in the Netherlands and an 4–0 win at Stade Louis II against AEK Athens, Monaco went to Spain to be defeated 1–0 by Deportivo. The Monegasque adventure really began after the return game against Deportivo, when Monaco won 8–3, which represents the highest number of goals in one match in the history of the new version of the UEFA Champions League. Croatian striker Dado Pršo scored four times, while captain Ludovic Giuly (2), Jérôme Rothen, Jaroslav Plašil and Édouard Cissé pulverised the Spanish defensive line. After two more draws against PSV Eindhoven and AEK Athens, Monaco finished at the top of Group C.
The first knockout round saw Monaco winning against Lokomotiv Moscow after a 2–1 defeat in Russia and a win 1–0 at Stade Louis II. In the quarter-finals, Monaco played European giants Real Madrid. After a 4–2 loss in Madrid (where Fernando Morientes scored, and was applauded by his former fans), Monaco created a sensation by defeating the Spanish 3–1 at home.
Monaco played against Chelsea in the semi-finals, and despite the exclusion of Akis Zikos, Monaco found enough strength to score twice and win the game 3–1. The last goal was scored by striker Shabani Nonda, who just returned from a seven-month injury. The second leg at Stamford Bridge saw Monaco resisting Chelsea's strikes, for a final score of 2–2 to reach the European Cup final for the first time in their history.
Three straight wins, two against Marseille and one against Partizan, secured Porto's place in the first knockout round before the last game of the group stage, a draw in Madrid. In the first knockout round, Porto met Manchester United. The Portuguese won 2–1 at home and managed to qualify in the final minutes of the second leg, when Costinha scored an equaliser in injury time in a 1–1 draw at Old Trafford. In the quarter-finals, Porto met a French team for the second time in the tournament: a 2–0 win at home and a 2–2 draw in France knocked Lyon out of the competition. In the semi-finals, Porto played Deportivo La Coruña, knocking them out on an aggregate score of 1–0.
The match was between Monegasque club AS Monaco, in their first European final, and Portuguese club Porto, the UEFA Cup winners the previous season. This was also the second time Porto had appeared in the Champions League final. Porto were the favourites after knocking out Manchester United in the second round of the competition, while Monaco had knocked out Real Madrid and Chelsea.
Following much pre-match speculation, Monaco captain Ludovic Giuly took up a central attacking position from the start, and four times in the opening three minutes his pace nearly caught Porto cold. On three occasions the experience of his opposite number Jorge Costa was just enough to keep him at bay as he darted through, but once, from Lucas Bernardi's searching pass, Vítor Baía had to race from his goalline to effect a risky last-ditch tackle. Giuly was now coming into his own with some deft touches on the edge of the Porto area, setting up Édouard Cissé whose cross was tantalisingly out of reach of Bernardi's outstretched leg, then providing Jérôme Rothen with a chance to cross from the other flank but this time Fernando Morientes was just out of range.
Sadly for Monaco, it was to be nothing more than a cameo from their captain as, after just 22 minutes he limped out of the game clutching his midriff, handing the armband to Julien Rodriguez and being replaced by Dado Pršo. Undeterred, Monaco kept their momentum and Nuno Valente became the first player to be booked after a clumsy foul on Cissé, then Morientes was adjudged offside from another astute pass from Bernardi.
The pendulum swung Porto's way when Rothen lost possession to Paulo Ferreira who ran up the right flank and crossed to the near post where Rodriguez just beat Deco to the ball. Five minutes later though Porto took the lead from the same source. This time Paulo Ferreira's centre was a lofted one and it found Carlos Alberto. Unselfishly, he tried to lay the ball off to Derlei but the ball bounced back to the teenager off the hapless Akis Zikos and this time it was despatched with aplomb past Flavio Roma's left hand. Up to that point, five minutes from the interval, Monaco had been the better side, but in the opening period of the second half Monaco looked shell-shocked, a goal down and minus the inspirational Giuly. Gradually however they crept back into contention as Porto failed to capitalise and only another marginal offside verdict denied Morientes an equaliser.
On the hour Porto withdrew Carlos Alberto in favour of Russian midfield player Dmitri Alenichev, and four minutes later Monaco brought on Shabani Nonda in place of Cissé as Monaco threw caution to the wind. But as their forays began to founder on the edge of the Porto area, the chance of a decisive counterattack grew more likely. In the 71st minute, Deco broke clear and found Alenichev on the left. The Russian put the ball straight back into the playmaker's path and Deco stroked home Porto's second. Four minutes later the game was over. This time it was Derlei who broke free, and he found Alenichev courtesy of a cross that deflected off Sébastien Squillaci, by now on for Gaël Givet. Alenichev needed no second invitation as he drove the third nail in Monaco's coffin. Two days later, manager José Mourinho left Porto to take over as Chelsea boss.