A 0-0 draw for Reading against West Bromwich Albion all but secured the Royals’ status in the Sky Bet Championship for the 2019-20 season.
Rotherham’s defeat to Birmingham City means that only a huge goal swing would allow the Millers to overtake Reading in the final two games. Mathematically still a possibility, but realistically plans can begin for another year in football’s second tier.
Boss José Gomes made one amendment to the starting XI after our Good Friday draw away at Bristol City; Nélson Oliveira returned to start, with Chris Gunter taking a place on the bench as the Royals reverted to a 4-3-3.
There was disappointment for the Portuguese front-man early on though; just two minutes into the game, he tried to stretch to run onto a forward ball from Lewis Baker, but pulled up holding his hamstring. He tried to continue for a few minutes longer, but his day was done. Danny Loader came on in his place.
Minutes later, a similar issue for Yakou Méïté as he went down in need of treatment. The in-form forward tried to run it off, but ultimately succumbed to his injury and needed replacing by Garath McCleary. Two subs made within the opening 13 minutes.
The early interruptions broke up any ebb and flow in the early exchanges; McCleary was first to register an effort of note after the 20-minute mark after racing onto Ovie Ejaria's early ball into the channel, but Kyle Bartley blocked well. Soon after the Baggies had their first sighter as Rakeem Harper drilled well wide.
After Andy Rinomhota had seen a close-range shot deflected through to goalkeeper Sam Johnstone, Reading stopper Emi Martínez was twice called upon to produce some top-quality stops. Former Royals forward Hal Robson-Kanu worked the ball onto his right and curled at goal, and Jacob Murphy lashed from range. The Argentine was equal to it on each occasion.
But Reading were looking composed in possession and lively on the attack, buoyed by vocal support from all around the ground. Ejaria slotted into the path of McCleary down the left wing, and scampered into the box to collect the return, but dragged his effort past the far post.
Loader aimed to put Reading in front before the break as he shimmied past a few green and yellow shirts and opened up his body, but curled his shot up and over the bar.
The first-half stoppages meant that there were four additional minutes signalled - and during that time, Mo Barrow also needed attention as he tried to nip in on a loose touch by Craig Dawson and got crunched by the West Brom defender. No foul given, but the Reading man was left in a heap.
Half-time: Reading 0-0 West Bromwich Albion
After injuries to Reading players had slowed the start to the first half, it was a knock to Baggies man Sam Field which caused a stoppage soon after the break. Liam Moore judged to be the offender, despite it seeming to be an innocent collision.
But Reading got back into their rhythm and could have scored a goal of real guile and craft. Andy Rinomhota dinked over the defence, allowing McCleary to backheel to fellow substitute Loader, but the teenager's left-footed fizzer was parried away by the goalkeeper.
Before the hour-mark, Gunter was introduced as the third and final Reading sub as he replaced Tyler Blackett in the left-back berth. Mason Holgate was the first man subbed off for West Brom - his final involvement before coming off for Matt Phillips was to drive down the right and pull back for Harper, who smashed against the crossbar from 20 yards.
Soon after at the other end, Ejaria had a golden chance when a cross deflected skywards, falling into his stride 12 yards out, but he misjudged his strike and it bobbled through to the goalie.
As the game ticked into the final quarter, Baker's tenacity saw him win the ball cleanly in the Baggies half and instantly pop a shot away, with Johnstone stranded off his line - it cleared the backtracking goalkeeper, but nestled on top of the goal.
And then Loader came ever closer to grabbing his maiden goal as a senior Reading player; a quickly worked corner was rotated to Andy Yiadom, who found Loader stooping on the far side, but his header was straight into Johnstone's arms.
West Brom began to get into some dangerous areas in the closing stages, but Reading's breaking power was evident. Martínez plucked out a cross, quickly offloaded to Ejaria, who in turn released McCleary. The winger fired wide as he cut inside.
Baker's set-piece prowess forced a brilliant stop from Baggies stopper Johnstone; Barrow was hacked down by Harper outside the area, and the Chelsea loanee's blistering free-kick was clawed out of the top corner.
Reading fans and players alike were incredulous when McCleary was taken down in the area by a loose Dawson tackle - the referee signalled the other way and booked the Royals man for simulation.
And mere moments later McCleary dispossessed a Baggies defender down the left and drove into the area - Barrow looked to have been bundled down off the ball inside the six-yard box but again no decision for the Royals.
In stoppage time, it needed a couple of brilliant saves by Martínez to keep the Baggies out - as well as the post and a goal-line clearance by Gunter.
Full-time sounded to huge cheers - the players gathered under the big screen to see the Millers' defeat to Birmingham revealed, sparking huge celebrations in RG2.
Full-time: Reading 0-0 West Bromwich Albion
Reading: Martínez, Yiadom, Blackett (Gunter 57), Moore (c), Miazga, Baker, Ejaria, Rinomhota, Barrow, Méïté (McCleary 13), Oliveira (Loader 6).
Unused subs: Walker, Baldock, Harriott, McIntyre.
West Bromwich Albion: Johnstone, Adarabioyo, Holgate (Phillips 61), Bartley, Dawson, Field (Brunt 65), Harper, Townsend, Murphy, Rodriguez, Robson-Kanu (Gayle 83).
Unused subs: Bond, Gibbs, Mears, Hoolahan.
Attendance: 17,255 (2,084 away).
Referee: Mr G Ward