Chelsea reached the Champions League for another season, despite losing 2-1 against Aston Villa at Villa Park.
Thomas Tuchel's side knew they needed to win to guarantee their place, but with Leicester City and Liverpool in action at the same time, there would be plenty of twists and turns. It proved to be that Tottenham did them a favour at the King Power Stadium.
For Villa, it was the perfect way to sign off in front of 10,000 fans after a progressive season under Dean Smith.
Chelsea defender James appeals for help from fans after medals stolen from home
- Spurs hit late treble to break Leicester hearts and spare Chelsea's blushes
- Mane double secures Liverpool win
- Manchester United beat Wolves to ruin Nuno's farewell with final day finesse
Mason Mount attempted to force the issue early with a couple of early attempts. His second, which was created by a Cesar Azpilicueta cross, was the Blues' best chance of the first half, but he couldn't keep it down.
It was from wide areas where Chelsea were getting most of their joy, with Azpilicueta and Ben Chilwell causing Villa all sorts of problems. But clear opportunities were still at a premium as the game went on.
After a spell of sustained pressure, Villa finally woke up. They twice won the ball high, but both John McGinn and Bertrand Traore failed to hit the target.
Half time was looming when the hosts went in front. Traore peeled off the Chelsea defence to meet Matt Targett's low corner before finding the top corner with a slightly mis-hit effort.
After a positive start to the second half, Chelsea soon found themselves two down. Jorginho fouled Traore in the area, and Anwar El Ghazi dispatched the penalty past Kepa Arrizabalaga, who replaced Edouard Mendy at the break.
Moments after coming on, Kai Havertz shot over from Chilwell's cross as a big chance came and went for Chelsea. But Chilwell himself then halved the deficit, powering home Pulisic's cross despite Emi Martinez's best attempt to claw it off the line.
Chelsea went in search of an equaliser, regaining their dominance from the first half. Martinez was forced into a brilliant late save to deny Chilwell, and Azpilicueta was sent off for reacting to Grealish. But their fate was sealed by events elsewhere.
TALKING POINT - Domestic job done for Tuchel, Europe next?
While he may not have won the FA Cup after reaching the final, Tuchel was able to excact revenge on Leicester by making the Champions League. He was the man who made it possible after his January arrival; Chelsea were going nowhere under Frank Lampard. This is a defeat which will feel like a win for the Blues, and now they march on to the Champions League final against Manchester City next week. They're the underdogs, but certainly capable.
MAN OF THE MATCH - Kortney Hause (Aston Villa)
There are plenty of candidates from Villa. Traore was a real threat whenever he got the ball; his power was too much to handle at times. But defensively, they dug in superbly. Marvelous Nakamba certainly deserves a mention, but Hause was there seemingly every time Chelsea crossed. He held things together and was superb.
Aston Villa: Martinez 6, Targett 7, Hause 8, Mings 6, Konsa 6, Nakamba 7, Grealish 7, McGinn 6, El Ghazi 7, Traore 8 Watkins 6 Substitutes: Chukwuemeka 5, Ramsey N/A
Chelsea: Mendy 5, Chilwell 6, Azpilicueta 6, Rudiger 5, Thiago Silva 5, James 5, Jorginho 4, Kovacic 5, Mount 6, Pulisic 6, Werner 5 Substitutes: Arrizabalaga 6, Ziyech 5, Havertz 6
Raiola offers Donnarumma to ‘good friend’ for free – Euro Papers
43' - GOAL! Traore pulls away and fires into the top corner!
51' - PENALTY VILLA! Jorginho fouls Traore!
52' - GOAL! El Ghazi scores! 2-0 Villa.
70' - GOAL! This isn't over yet! Chilwell's effort is over the line from Pulisic's cross.
89' - RED CARD! Chelsea captain Azpilicueta sent off for reacting to Grealish.
Opinion: Chelsea can’t keep expecting Lukaku to save the day
Lukaku the hero again as Chelsea squeak past determined Zenit