Middlesbrough 3 Stoke City 1
A double from Matt Crooks helped Middlesbrough keep their Sky Bet Championship play-off hopes alive with a 3-1 win against Stoke.
Lewis Baker scored a first-half own goal and Crooks struck in each half before Nick Powell scored a stoppage-time consolation for the Potters.
Boro remain seventh in the table and now need to win their final game at Preston to have any chance of making the play-offs. They can currently catch Luton or Sheffield United.
The hosts had an early chance when Isaiah Jones came down the right and found Andraz Sporar, but the forward was offside.
Stoke also enjoyed spells of possession early on but Boro defended well, before Baker had a shot from distance 10 minutes in but his effort flashed wide of a post.
Boro took the lead in the 21st minute when captain Jonny Howson won the ball in the middle and, after finding space, picked out Crooks.
The midfielder made an instant impact on his return from suspension, slotting the ball past goalkeeper Joe Bursik and into the bottom corner.
The hosts struck again just four minutes later with Howson once again the provider. His free-kick from outside of the box took a deflection off Baker and into the net.
Duncan Watmore thought he had added a third in the 28th minute after Dael Fry nodded down from a corner and the forward blasted the ball home from close range, but it was ruled out for offside.
Bursik was forced into a save just before the break when Marcus Tavernier’s corner was launched into the six-yard box but the Potters goalkeeper got a firm hand to claw it away.
Substitute Steven Fletcher provided an opportunity early in the second half on the edge of the Boro box, whipping in a low cross that flashed across goal, but the hosts cleared.
The Potters had their first chance of the game in the 54th minute when substitute Powell drilled the ball low and forced goalkeeper Luke Daniels to make a good save to his right.
Crooks scored his second of the game and Boro’s third in the 71st minute when he stabbed home Fry’s knockdown from close range.
With 10 minutes to go, Jacob Brown blazed wide of a post before his header moments later glanced across goal and out.
Stoke scored a consolation in stoppage time when Mario Vrancic’s shot was saved but Powell tucked away the loose ball from Daniels’ save.
Blackpool 0 Derby 2
Derby put on a show for their travelling fans as they beat Blackpool 2-0 at Bloomfield Road.
More than 4,000 County fans made the trip for the club’s final away game of the Championship season.
And Wayne Rooney’s relegated side got the job done as they ended a streak of nine consecutive losses on the road.
The Rams, who had not won on their travels in 2022, snatched the lead against the run of play through Michael Ebiowei’s strike 15 minutes from time and then doubled their advantage through an Eiran Cashin header — the pair’s first senior goals.
Despite being spurred on by a vocal and celebratory travelling support, it was the hosts who started the brighter.
Callum Connolly had a sight at goal inside five minutes when he met a Charlie Kirk corner, but his strike was wide of the target.
Returning goalkeeper Kelle Roos, making a first start since November, then produced an impressive instinctive save to prevent the lively Kirk from opening the scoring.
Blackpool’s promise looked destined to be rewarded when an oblivious Festy Ebosele was penalised for bringing down the onrushing James Husband in the area.
However, Gary Madine’s spot-kick was saved well by Roos to keep the scoreline level.
The unflustered Tangerines continued their dominance despite the setback, with Kirk firing a CJ Hamilton cutback wide from a promising position.
An influential Kirk then turned provider, firing an enticing delivery into the area where an advancing Shayne Lavery was unfortunate not to convert.
Derby gradually grew into the games and could have snatched an unlikely lead before the interval after finishing the half strongly.
Luke Plange first tried his luck from outside the area before a guided Louie Watson effort dropped narrowly beyond a post, much to the relief of a scampering Blackpool keeper Chris Maxwell.
After the restart Neil Critchley’s side returned to the ascendency, with Kirk again going close with a delicate effort which drifted narrowly wide of a post.
Roos further justified his return when he got down quickly to stop a Luke Garbutt shot that was redirected dangerously by Madine.
A constant serenading from the travelling Rams faithful was rewarded as Ebiowei stabbed home from close range when Maxwell failed to hold a Louie Sibley strike.
And Ebiowei then turned provider with eight minutes of normal time to go, floating a delightful delivery into the area where an unmarked Cashin headed in a second.
Blackburn 0 Bournemouth 3
Dominic Solanke’s 30th goal of the season and a Philip Billing brace gave Bournemouth a vital 3-0 win at Blackburn to remain in the driving seat for automatic promotion.
Chances flowed for both sides but ultimately the Cherries highlighted the gulf in quality, epitomised by the goalscorers.
Solanke eased any nerves in the 21st minute with a composed 12-yard finish and though they had more chances, including Jaidon Anthony hitting the woodwork, the hosts could have equalised through Ben Brereton Diaz who struck the post and forced fine saves from Mark Travers.
But Billing settled matters with two emphatic finishes in the space of nine second-half minutes, finding the top corner first and the bottom corner in the 79th minute for his 11th of the campaign.
The Cherries remain second after scoring three on the road for the third consecutive outing and they go into the promotion shootout with Nottingham Forest in fine form.
The result extinguished Blackburn’s faint play-off hopes, with the damage done in a run of 16 games that has yielded 13 points, taking them from second to ninth.
Rovers were unchanged after the resounding Preston win while Scott Parker made two changes and called upon Billing and Jordan Zemura.
Both teams started nervously but the Cherries were quickest into their stride and took the lead in the 21st minute when a raking Nat Phillips pass was cushioned beautifully by the influential Billing into the path of Solanke and he made no mistake, slotting past Thomas Kaminski into the bottom corner.
Travers tipped away a Sam Gallagher header before Brereton Diaz beat the offside trap in the 27th minute but thumped the near post from close range.
More excellent work at the other end from Billing provided a chance for Solanke but his shot deflected into the arms of Kaminski and they went closer still when Anthony’s 20-yard curling effort cannoned off the crossbar.
Brereton Diaz unleashed a left-foot shot just after the restart that Travers parried away while at the other end, Kaminski had to save Zemura’s acute drive and then Darragh Lenihan heroically cleared Jefferson Lerma’s goalbound rebound.
Travers once again won his personal battle with Brereton Diaz, saving his left-foot drive with his feet, and this end-to-end encounter then saw Solanke muscle past two defenders before missing a gilt-edged chance, with Kaminski’s sprawling save denying him a second.
But a quickfire double put the game to bed as Solanke found Billing in the 70th minute and he hammered a thunderous 12-yard shot into the top corner.
The imperious Dane rounded off the scoring nine minutes later, collecting Siriki Dembele’s pass before emphatically rolling into the bottom left corner.
Nottinghham Forest 5 Swansea 1
Sam Surridge bagged a hat-trick to help Nottingham Forest maintain the pressure on second-placed Bournemouth, with a thumping 5-1 win over Swansea.
The striker has now scored seven Championship goals since his £2.2million signing from Stoke in January — but few will have been more precious than the three that helped Steve Cooper secure a vital win over his former club.
A Cyrus Christie own goal was cancelled out by Michael Obafemi to leave it 1-1 at half-time.
But Surridge’s second-half treble — and a late goal from substitute Alex Mighten — ensured Forest will head to Bournemouth on Tuesday still trailing Scott Parker’s side by just three points.
Forest were a whisker away from taking the lead when Philip Zinckernagel saw his shot blocked in the goalmouth by defender Ryan Manning. It took another brilliant block, this time from ex-Red Christie, to deny James Garner.
Steve Cook’s lofted ball down the middle sent Surridge clear — but he did not get enough on an attempted lob and Andy Fisher made a simple save.
Forest took the lead in dramatic circumstances in the 22nd minute, after Christie desperately tried to claw the ball to stop it from crossing the line after he had charged down a Jack Colback cross. The defender was initially shown a red card by referee Graham Scott, who also pointed to the penalty spot.
But, after a long discussion with his fellow officials, the red card was withdrawn and the goal was awarded.
Swansea equalised six minutes later when Matt Grimes set up Obafemi to find the bottom corner with a precise shot from 12 yards.
But then Forest pushed hard for another, with Joe Worrall denied by a fine stop from Fisher, who then made a brilliant double save to firstly push Surridge’s header onto a post, before regaining his feet to keep out Ryan Yates’ close-range header. Surridge guided another fine chance wide.
Brice Samba had to make a strong save to deny Obafemi a second goal before the interval.
It took just three minutes of the second half for Forest to restore their lead, as Garner’s corner was perfectly flighted towards the far post, where Surridge headed home simply but emphatically.
Four minutes after that it was 3-1, as the same two players combined — with Garner powering forward, before slotting in Surridge down the left. He applied a brilliant curling finish into the top corner.
Fisher made another great stop to deny Surridge his hat-trick — but it finally came in the 69th minute, after a Djed Spence cross had been deflected onto the bar and the striker was in the right place to drive it home.
Goal difference could be vital in the race for second place and Forest will have been happy to see Mighten battle his way down the centre, before managing to force the ball beyond Fisher.
Cardiff 1 Birmingham City 1
Former Cardiff keeper Neil Etheridge’s blunder earned his old club a 1-1 home draw with Birmingham.
Etheridge grabbed Bluebirds substitute Max Watters around his waist to concede an 82nd-minute penalty that was then converted by Will Vaulks to cancel out Jeremie Bela’s first-half goal for the visitors.
His mistake also meant the Blues have now failed to win on any of their last nine trips to the Welsh capital.
Birmingham had started positively as Juninho Bacuna exchanged passes with Lyle Taylor, but his shot was too tame to trouble home keeper Dillon Phillips unduly.
At the other end, Mark Harris scooped over the bar from eight yards after the visitors had failed to clear a Tommy Doyle corner.
More purposeful play by Bacuna then led to a chance for Onel Hernandez that again lacked the conviction to beat Phillips, while captain Gary Gardner curled over from the edge of the box.
Perry Ng went on to drag a 20-yard attempt wide for Cardiff after he had created space following a neat side-step, but it was Lee Bowyer’s men who forged ahead midway through the first half courtesy of Angolan international Bela’s second goal of the season.
The instigator was again Bacuna, whose smart play inside his own half and vision led to a perfectly-weighted pass to send Bela sprinting straight at Phillips.
He then showed immaculate composure to find the Cardiff keeper’s bottom-left corner from 12 yards.
In response, Ng’s 30-yard strike was parried by Etheridge and, after Harris retrieved the ball, the away keeper was also equal to Cody Drameh’s effort from closer in.
Taylor and Hernandez, meanwhile, both called Phillips into near-post action before Etheridge was again needed to catch a curling Doyle free-kick.
On the stroke of half-time, Harris then shot wide after a forward charge to the edge of the Birmingham penalty area.
Cardiff upped their attacking intent after the restart but it was the visitors who continued to pose a greater goal threat on the counter with Gardner missing the target from two free headers in the home box — the first following Ivan Sunjic’s cross and the second from a Bacuna corner.
Vaulks did warm Etheridge’s hands from 20 yards after a Drameh cutback just past the hour, but Bela curled a free-kick over moments later and the Midlanders should have put the outcome beyond all doubt when Hernandez escaped Ollie Denham’s attentions far too easily close to the byline — but Jordan James shot wide when presented with a free shot on goal.
Cardiff, whose starting XI boasted just 11 goals to their name in almost 250 collective appearances for the club this season, were mustering little in response until Ng’s ball in from the right lured Etheridge out of his goal, and he only succeeded in hauling down Watters, whose fellow replacement Vaulks blasted the resulting penalty into the keeper’s top-left corner.
Reading 0 West Brom 1
West Brom’s disappointing Championship campaign at least moved towards its close on a positive note with a 1-0 victory at lowly Reading.
In a drab first half of few chances, Albion went closest when centre-back Semi Ajayi nodded against a post from close range.
The fare was not much better after the interval but West Brom secured the win in the 78th minute, when leading marksman Karlan Grant pounced after a quick break.
Neither side had anything to play for at the SCL Stadium in their penultimate match of the season.
West Brom’s stuttering push for a possible play-off spot ended when they managed only a 0-0 draw at home to Coventry last Saturday. They had won only two of their past seven games.
Reading finally secured second-tier survival despite a 3-0 defeat at Hull — courtesy of the 1-0 home loss of relegation rivals Peterborough against Nottingham Forest.
A decent run of only two defeats in eight outings had proved crucial.
Reading interim manager Paul Ince faced Albion boss Steve Bruce, his former Manchester United team-mate, but neither can have been too impressed with the early exchanges.
West Brom did fashion the best opening, when Conor Townsend found space on the left flank from a Grady Diangana pass.
But Townsend’s subsequent cross carried too much weight and the opportunity went begging.
Albion did better when Adam Reach crossed from the same wing.
Central defender Ajayi rose highest in the crowded area but his header clattered against the left-hand upright of home goalkeeper Orjan Nyland.
Grant then tried his luck from 20 yards only to see a poor effort dribble wide.
Little had been seen of Reading going forward until, on the half-hour mark, they went close to breaking the deadlock from a well-directed Junior Hoilett corner.
Home skipper Michael Morrison made a clean connection on it but nodded narrowly past the far post.
Albion made most of the running in the early stages of the second period.
Dara O’Shea played in a clever chipped pass to Grant in the home danger area but the forward’s sloppy control cost him any chance of a sight of goal.
Matty Phillips almost deceived Nyland with a curling, deep cross that looked like dropping into the net before the keeper tipped it over the crossbar.
Reading again struggled to gain forward momentum, though West Brom keeper David Button did need two attempts to gather a dipping corner from Hoilett.
Albion were swiftly back on the attack and finally broke through 12 minutes from time following a quick counter and incisive pass from substitute Callum Robinson.
Grant did well to engineer space for himself before drilling home his 16th goal of the season.
Barnsley 1 Preston North End 3
Preston beat Barnsley 3-1 in a convincing display at Oakwell.
A brace from Daniel Johnson and a goal from Emil Riis sealed all three points for Ryan Lowe’s side despite Aiden Marsh’s opener.
Preston had the first shot in the game when Ali McCann found space just inside the penalty area but he rushed his effort and hacked the ball over the bar.
Barnsley took the lead in the 17th minute when Victor Adeboyejo managed to get the ball to the by-line with some excellent skill and pulled the ball back to Marsh, who struck home.
Ben Whiteman tested Jack Walton in the Barnsley goal with a long-range attempt, Walton diving to his right to tip the ball wide.
Preston equalised in the 23rd minute as Riis laid the ball off to Johnson on the left-hand side and the midfielder drilled the ball into the bottom right corner.
Riis attempted to beat Walton at his near post after receiving the ball in the box but Walton dealt with the shot, tipping the ball wide for a corner.
Barnsley came close to regaining the lead when Carlton Morris fired in a shot from the edge of the penalty area but Daniel Iversen in the Preston goal managed to parry the ball away from danger.
Whiteman almost scored a spectacular goal after sweetly striking the ball on the volley from around 20 yards out. His attempt clipped the top of the bar, going behind for a goal kick.
The sides went into half-time with the score 1-1, with Preston having dominated possession while Barnsley managed to spring the occasional counter-attack.
Johnson doubled his tally in the 54th minute to give Preston the lead. Johnson curled the ball across goal with his left foot and the ball bent away from Walton and into the top corner.
Riis should have doubled Preston’s lead following a quick counter. The ball was squared across to Riis, sending him one-on-one, but Walton closed him down and blocked his attempt.
However, Riis made up for his earlier error by grabbing Preston’s third goal of the game in the 74th minute when he ran onto a long through-ball, rounded the keeper and squeezed the ball into the net from a tight angle.
Substitute Mikey O’Neil had a chance for Preston after drilling a shot from the right-hand side of the box, with his effort going narrowly wide.
Coventry 1 Huddersfield 2
Huddersfield guaranteed a top-four finish following an entertaining narrow 2-1 Championship win at Coventry.
Harry Toffolo scored his fourth goal in six games on the stroke of half-time to put the Terriers ahead.
Tino Anjorin then made the game safe with a composed penalty 11 minutes from time.
Viktor Gyokeres pulled back a consolation goal in stoppage time but it was too little too late.
It means Huddersfield will now face either Luton, Sheffield United or Middlesbrough in the play-off semi-finals.
Martyn Waghorn had a shot deflected just wide for the Sky Blues following a lively start to the game.
Dom Hyam had an overhead kick blocked, before Waghorn had another shot diverted for a corner as Coventry began to up the pressure.
But their rhythm was disrupted following a long spell of treatment for Michael Rose and Kyle McFadzean following a clash between the two.
The fans paid tribute to Huddersfield fan Daryl Hopson in the 31st minute following his recent death, following a battle against cancer.
Callum O’Hare blasted wide after Jamie Allen played him in following a poor clearance, while Ben Wilson saved a Jordan Rhodes shot after 34 minutes following a rare break from the Terriers.
Lee Nicholls got down well to save a Hyam attempt after Waghorn teed him up and Allen had a volley from the edge of the box saved by the Town goalkeeper five minutes before the break.
Gustavo Hamer had a strike blocked for a corner as City continued to press for the opener, but they were hit with a sucker punch when Toffolo curled in a beauty from just outside the box to put Huddersfield ahead.
The advantage could have been even greater in stoppage time, but Duane Holmes could only find the side netting after going around the goalkeeper.
Hamer had a shot comfortably saved and Waghorn headed over as the hosts started strongly after the break.
Toffolo just failed to get on the end of a Scott High cross after a good move by Huddersfield, while Rhodes missed a glorious chance to double the visitors’ lead when he fired wide from six yards out.
O’Hare had a shot saved by Nicholls just after the hour mark as Gyokeres opened up the defence and Wilson made a key save after 75 minutes when he got the better of Danny Ward in a one-on-one situation.
But Huddersfield sealed the points four minutes later when Anjorin coolly slotted home from the penalty spot after Lewis O’Brien was brought down by Wilson.
Gyokeres pulled a goal back at the death after O’Hare set him up.
Millwall 3 Peterborough 0
Millwall kept alive their narrow hopes of a Championship play-off spot ahead of the final weekend of the season with a 3-0 thrashing of already-relegated Peterborough.
Benik Afobe lashed home his 13th of the campaign from a corner to deservedly break the deadlock for the dominant hosts in the 53rd minute.
Josh Knight put into his own goal in trying to clear a cross from substitute Jed Wallace for Millwall’s second and moments later Wallace delivered a brilliant ball for George Saville to head home a third.
Millwall endured a frustrating opening 45 minutes in which they saw most of the ball but could not find the back of the net.
Oliver Burke delivered a brilliant ball into the path of Afobe, who was beaten to it by David Cornell in the Posh goal.
And they enjoyed long spells of possession in front of a packed, raucous Den, who more than played their part in getting their side over the line.
Danny McNamara saw a mis-hit cross sail narrowly wide before Tom Bradshaw was denied by Cornell’s fast reactions, the keeper closing down the Millwall striker’s space after he had ghosted into the penalty box unattended.
The chance of the half, however, fell to Peterborough’s Jonson Clarke-Harris and despite it being very much against the run of play, he should have done better.
Played in by a cute Sammie Szmodics slide pass, Clarke-Harris opted to try and finish with his first touch, allowing Bartosz Bialkowski to get down and save with his legs.
The miss would prove to be crucial, as Rowett’s men turned on the style after the interval.
Saville was denied by a brilliant save from Cornell, which set the tempo for the remainder of the game.
Bialkowski was kept on his toes — Jack Marriott’s 20-yard effort seeing him tip the ball round the post — but that was as good as it got for Peterborough.
Afobe had two attempts before finishing unerringly into the far corner, taking full advantage of a poor defensive header from Clarke-Harris.
Millwall went through the gears, Wallace drove a wicked low delivery right across the six-yard box but saw it slide inches out of the reach of his team-mates.
Murray Wallace and Saville had twice struck the woodwork within the same attack, preceding a floated cross in from the right by Wallace.
The unfortunate Knight could only prod past his own goalkeeper, under pressure from Jake Cooper on his shoulder.
Just three minutes later, Saville got the goal his industrious performance deserved, rising highest at the back post, Wallace again supplying the assist.
Millwall will travel to Bournemouth needing a win and other results to go their way, but for 17,000 fans at the Den, the dream remains alive.
Bristol City 5 Hull City 0
Bristol City’s three-pronged attack tore Hull apart in a thumping 5-0 Championship victory at Ashton Gate.
By the 35th minute, Andreas Weimann, Antoine Semenyo and Chris Martin had all found the back of the net, with Weimann and Martin adding further goals in the second half.
Weimann took advantage of goalkeeper Nathan Baxter’s ill-judged rush towards the edge of his penalty area to shoot his 21st goal of the season after six minutes.
Semenyo doubled the advantage after 33 minutes, breaking onto Weimann’s pass to shoot low past Baxter and then set up a Martin tap-in with low cross from the left to make it 3-0.
Martin won a tackle near the halfway line and broke clear to slot the fourth ine minutes after the break. And Weimann completed the scoring with an impudent chip eight minutes from time.
Both Semenyo and Weimann received standing ovations when substituted in the closing stages as Robins fans celebrated an exhilarating final home game of the season.
The hosts were almost in front after three minutes when Baxter advanced only to see Martin’s header loop over him. Sean McLoughlin got back to clear the effort off the line.
The goalkeeper failed to learn his lesson and was out of position again when Weimann opened the scoring.
Hull almost levelled two minutes later when striker Tom Eaves unleashed a vicious volley from the right corner of the box, which was palmed over by Dan Bentley.
Allahyar Sayyadmanesh wriggled his way into Bristol’s penalty area after 27 minutes, only to shoot over, and Keane Lewis-Potter had a firm header saved by Bentley.
But the response from the home side was swift and Martin was only just wide with a 32nd-minute volley on the turn.
The two goals in quick succession had home fans on their feet and there was a party atmosphere as half-time approached.
Within moments of the second half starting, Semenyo was in on goal again, but his shot lacked the power to beat Baxter.
Hull had made a change at the break, sending on Regan Slater for Eaves.
Brandon Fleming volleyed over as the visitors attacked the end where their travelling supporters were situated, but Martin’s second goal put an end to any hopes of a revival.
Still the visitors pressed forward. Bentley had to save a curling effort from Fleming and Richard Smallwood sliced the ball badly wide when teed up by Lewis-Potter.
The hosts remained dangerous themselves and Weimann picked his spot from inside the box to set the seal on a day which saw him dominate the club’s Player-of-the-Season awards.