Match ends, Reading 2, Swansea City 2.
Swansea City secured a play-off place courtesy of a 2-2 draw at Reading that ended the Royals' top-six hopes.
Yakou Meite's header offered Reading hope of claiming the win they needed to keep their season alive but Jamal Lowe tapped in the equaliser.
Andre Ayew put Swansea ahead late on only for Tomas Esteves to guide home to earn Reading a point in stoppage time.
Steve Cooper's Swansea will face either Brentford, Bournemouth or Barnsley in the play-offs.
The draw sees Swansea climb a place to fifth while Reading, who topped the table in the early stages of the season, stay seventh.
Swansea had been in top-two contention for much of the campaign, but their recent poor form means a second successive crack at the play-offs.
They sealed their top-six spot on this ground last season, when a memorable 4-1 victory saw them overhaul Nottingham Forest in the closing minutes of the campaign.
Swansea almost made the perfect start on their return to the Madesjki Stadium as Ben Cabango headed wide of the far post inside the first minute before Wayne Routledge's drive ricocheted over the bar.
But Reading grew into the contest and took the lead with their first clear sight of goal.
The breakthrough came from a throw-in, with Omar Richards and Lucas Joao involved before John Swift marked his first start since early February with an assist.
His inviting cross was met by Meite, who rose above Jake Bidwell and powered a header into the net via the foot of the post.
Conor Hourihane's loose pass then presented Joao with a golden chance to double Reading's advantage before half-time, but Freddie Woodman got down sharply to save Swansea.
The visitors might have levelled early in the second period only for Liam Cullen to head Lowe's drilled cross wide of the target.
Reading's Andy Rinomhota volleyed into the side netting at the other end before substitute Ayew inspired the Swansea leveller.
The Ghana captain took three Reading players out of the game as he flicked a backheel through Liam Moore's legs, allowing Jay Fulton to surge into the Reading box.
When Fulton's low drive was parried by Rafael, Lowe was on hand to sweep home his fifth goal in as many games.
Reading saw a penalty appeal turned down as Fulton grappled with Joao before a sweet Swansea passing move ended with Bidwell rolling the ball across goal for Ayew to score his 16th goal of the season from point-blank range.
Swansea might have added a third goal in stoppage time but Lowe's drive cannoned to safety off the post, then Reading replied as Esteves steered home his first senior goal from the edge of the penalty area.
But there was to be no dramatic climax as Swansea held on for the point they needed.
Reading manager Veljko Paunovic:
"It's a very disappointing outcome. It is hard to accept that our season is over after how hard we have fought.
"Everyone has worked so hard to overcome setbacks and injuries and so many people have worked so hard to come back and help the team.
"But although it's hard to take, we have to look at the positives. This season there has been a huge improvement in our character and our identity and we have an excellent mix of young and experienced players for next season."
Swansea head coach Steve Cooper:
"I thought there was nothing much between the teams in the first half. They got the lead and we threatened a few times as well without having enough attempts on goal.
"The message at half-time was to keep going but just be a bit more positive with our positional play and our passing.
"We did that and we scored two good goals. Then it was always going to be crazy because they had to win.
"You just want to get that point. Okay we want to win and there's a slight disappointment that we didn't, but if there's ever a game to accept the draw then maybe this would be the one."
- 33Cabral Barbosa
- 17YiadomSubstituted forPontes Estevesat 81'minutes
- 29HolmesBooked at 19mins
- 3RichardsSubstituted forAlukoat 87'minutes
- 11MeiteSubstituted forSemedoat 65'minutes
- 10SwiftSubstituted forOliseat 65'minutes
- 14EjariaSubstituted forPuscasat 81'minutes
- 18Lucas João
- 2Pontes Esteves
- 26NaughtonSubstituted forRobertsat 64'minutes
- 5GuehiBooked at 17mins
- 6FultonBooked at 69mins
- 14HourihaneSubstituted forSmithat 87'minutes
- 15RoutledgeSubstituted forWhittakerat 64'minutes
- 20CullenSubstituted forA Ayewat 64'minutes
- 10A Ayew
- John Brooks
- Shots on Target
Second Half ends, Reading 2, Swansea City 2.
Goal! Reading 2, Swansea City 2. Tomás Esteves (Reading) left footed shot from the centre of the box to the bottom left corner. Assisted by Andy Rinomhota.
Attempt blocked. Sone Aluko (Reading) right footed shot from the left side of the box is blocked. Assisted by Tomás Esteves with a cross.
Offside, Swansea City. Marc Guehi tries a through ball, but Jamal Lowe is caught offside.
Attempt missed. Morgan Whittaker (Swansea City) left footed shot from the right side of the box misses to the right following a fast break.
Jamal Lowe (Swansea City) hits the left post with a right footed shot from the right side of the box. Assisted by Connor Roberts following a fast break.
Marc Guehi (Swansea City) wins a free kick in the defensive half.
Foul by George Puscas (Reading).
Attempt missed. Michael Olise (Reading) left footed shot from outside the box is too high.
Substitution, Reading. Sone Aluko replaces Omar Richards.
Substitution, Swansea City. Korey Smith replaces Conor Hourihane.
Goal! Reading 1, Swansea City 2. André Ayew (Swansea City) left footed shot from very close range to the bottom right corner. Assisted by Jake Bidwell.
Attempt blocked. Morgan Whittaker (Swansea City) left footed shot from outside the box is blocked. Assisted by Jake Bidwell.
Substitution, Reading. Tomás Esteves replaces Andy Yiadom.
Substitution, Reading. George Puscas replaces Ovie Ejaria.
Ben Cabango (Swansea City) wins a free kick in the defensive half.
Foul by Alfa Semedo (Reading).
Attempt missed. Jamal Lowe (Swansea City) right footed shot from the centre of the box is close, but misses to the right. Assisted by Morgan Whittaker.
Corner, Reading. Conceded by Jay Fulton.
- Are you a pub quiz whizz? Then test your knowledge of the Oscars
- No Passion, No Point is back: Eddie Hearn chats to the Rio Ferdinand about his next career move