Match ends, Swansea City 1, Millwall 0.
Swansea City 1-0 Millwall: George Byers scores Welsh side's winner
Swansea City beat Millwall to bring a satisfying end to a turbulent week off the field in which chairman Huw Jenkins resigned.
The Swans created several first-half chances and deservedly led as George Byers struck his first goal for them.
Millwall grew into the game after the break and were within inches of equalising when Jed Wallace volleyed narrowly over.
The visitors had further chances to level, while Swansea's Bersant Celina saw a neat chipped effort cleared off the line.
But that near miss had no bearing on the result, which lifts the Swans up to 11th in the Championship table and keeps Millwall 20th.
Swansea had endured a volatile week away from the pitch, with tensions at boardroom level coming to a head with Jenkins' resignation after 17 years as chairman.
Since the club was bought by an American consortium in 2016, Jenkins and the new majority shareholders, Steve Kaplan and Jason Levien, had been singled out for strong criticism from Swansea's supporters.
And while a large faction of them had long been calling for Jenkins to go, the sense of discontent remained as 100 or so fans gathered outside Liberty Stadium before kick-off to vent their fury towards Kaplan and Levien.
There have been many reasons for their anger in recent seasons and one of them is Swansea's poor dealings in the transfer market.
Last month's deadline day was a prime example, with three senior players - Wilfried Bony, Tom Carroll and Jefferson Montero - leaving to join a lengthy list of departures this season.
Swans fans also feared their young Wales winger Daniel James would be sold to Leeds but, on a farcical deadline day in which he spent hours at the Yorkshire club's base, the move collapsed with Jenkins playing an influential role in the deal's breakdown.
James returned to the starting line-up for the first time since then against Millwall, and the 21-year-old was typically bright on the right wing as he ran at opposing defenders with glee.
Swansea's midfield pairing of Byers and Matt Grimes were the source of creativity for the home side and, after the latter's free-kick forced a fine save from Jordan Archer, it was fitting that the two players should combine for the winning goal.
Grimes' inswinging corner was only half-cleared to Byers and, after his first shot was blocked, the 22-year-old shifted the ball on to his left foot and drilled a powerful effort across goal, which appeared to take a deflection on its way into the far corner.
Romeo tests Mulder
The goal was the least Swansea's first-half display warranted, though they were guilty of letting their opponents back into the game after the restart.
Mahlon Romeo had Millwall's first shot on target to test Erwin Mulder and, after a late corner was partially cleared, Wallace's left-footed volley was tipped over by the Swans goalkeeper.
The visitors sensed a point was in the offing but, as they pushed forward, they left themselves occasionally vulnerable in defence.
Celina almost punished them with a delicate dink over Archer, which Shane Ferguson did well to clear off the line, but it mattered not as Swansea stayed within six points of the Championship play-off places.
Swansea City manager Graham Potter said: "Pride, with the players and supporters. I thought the connection was fantastic between the two.
"It was a really hard-earned, hard-fought win. I think we deserved it overall.
"It's been a big week, it really has. You look at the age of the players out there, the stage of their careers, they're just starting.
"To have that responsibility, and to be the home team that has to find the answers against a team that's got good players and they can beat you on their day no problem, so from that perspective it's really pleasing."
Millwall manager Neil Harris said: "First half we paid Swansea a little too much respect.
"We were very disciplined and organised against a Swansea side whose movement and rotation was very impressive.
"I would never expect my team to concede from a set-play at Swansea, I have to be frank about it.
"I'm disappointed with the players is in that respect, it should be us causing the problems at the other end."
- 5van der Hoorn
- 24JohnSubstituted forNaughtonat 60'minutes
- 46Baker-RichardsonSubstituted forMcBurnieat 70'minutes
- 15RoutledgeSubstituted forFultonat 90+4'minutes
- 1ArcherBooked at 86mins
- 25WallaceSubstituted forFergusonat 45'minutes
- 6WilliamsSubstituted forMorisonat 74'minutes
- 44MarshallBooked at 42minsSubstituted forO'Brienat 84'minutes
- Kevin Friend
- Shots on Target
Second Half ends, Swansea City 1, Millwall 0.
Attempt missed. Ryan Leonard (Millwall) right footed shot from outside the box misses to the left.
Substitution, Swansea City. Jay Fulton replaces Wayne Routledge.
Attempt missed. Jake Cooper (Millwall) left footed shot from very close range is close, but misses to the left. Assisted by Shaun Hutchinson following a corner.
Attempt missed. Shaun Hutchinson (Millwall) header from very close range is close, but misses to the left. Assisted by Shane Ferguson with a cross following a corner.
Corner, Millwall. Conceded by Kyle Naughton.
Wayne Routledge (Swansea City) wins a free kick on the left wing.
Foul by Jake Cooper (Millwall).
Attempt missed. Oliver McBurnie (Swansea City) right footed shot from outside the box is close, but misses to the right. Assisted by Bersant Celina.
Attempt saved. Matt Grimes (Swansea City) left footed shot from a difficult angle and long range on the right is saved in the centre of the goal.
Delay over. They are ready to continue.
Delay in match Daniel James (Swansea City) because of an injury.
Jordan Archer (Millwall) is shown the yellow card for a bad foul.
Daniel James (Swansea City) wins a free kick on the right wing.
Foul by Jordan Archer (Millwall).
Offside, Millwall. Steve Morison tries a through ball, but Jed Wallace is caught offside.
Corner, Swansea City. Conceded by Shane Ferguson.
Attempt blocked. Daniel James (Swansea City) right footed shot from the right side of the box is blocked. Assisted by George Byers.
Substitution, Millwall. Aiden O'Brien replaces Ben Marshall.
Offside, Millwall. Ryan Leonard tries a through ball, but Mahlon Romeo is caught offside.
Attempt blocked. Daniel James (Swansea City) left footed shot from the centre of the box is blocked. Assisted by Wayne Routledge.
Daniel James (Swansea City) wins a free kick in the defensive half.
Foul by Ben Marshall (Millwall).
Daniel James (Swansea City) wins a free kick on the right wing.
Foul by Shane Ferguson (Millwall).
Attempt blocked. Bersant Celina (Swansea City) right footed shot from the left side of the six yard box is blocked. Assisted by Wayne Routledge.
Hand ball by Shane Ferguson (Millwall).
Substitution, Millwall. Steve Morison replaces Shaun Williams.
Attempt missed. Oliver McBurnie (Swansea City) header from the centre of the box is close, but misses to the right. Assisted by George Byers.
Substitution, Swansea City. Oliver McBurnie replaces Courtney Baker-Richardson.
Attempt missed. Jake Cooper (Millwall) header from the centre of the box misses to the left. Assisted by Shane Ferguson with a cross.
Foul by George Byers (Swansea City).
Shaun Williams (Millwall) wins a free kick in the attacking half.
Attempt blocked. Daniel James (Swansea City) left footed shot from outside the box is blocked. Assisted by Mike van der Hoorn.
Attempt saved. Ben Thompson (Millwall) right footed shot from outside the box is saved in the top centre of the goal. Assisted by Lee Gregory.
Substitution, Swansea City. Kyle Naughton replaces Declan John because of an injury.
Attempt missed. Bersant Celina (Swansea City) left footed shot from the centre of the box is high and wide to the left. Assisted by Wayne Routledge.
Bersant Celina (Swansea City) wins a free kick in the attacking half.
Foul by Shaun Williams (Millwall).