Millwall beat Portsmouth 3-1 at The Den on Saturday afternoon, a result that felt settled well before the final whistle despite a frantic spell of changes and bookings in the second half.
Portsmouth made the brighter start and went ahead through Millenic Alli on 17 minutes, finishing calmly after a move that cut through the Millwall defensive shape with some purpose. The home side, though, grew into the game steadily and dominated possession through the middle third without creating clear openings until John Swift changed the picture.
Swift levelled on 55 minutes and added a second five minutes later, both goals coming from positions just inside the area where he had found space consistently throughout the second half. Millwall's third arrived through Tristan Crama on 75 minutes, and by that point Portsmouth were chasing a game their defending no longer had the composure to rescue.
The closing stages were scrappy. Zak Sturge and Barry Bannan were both booked in quick succession around the 81st minute, and the substitutions from both benches disrupted any rhythm that remained. Jacob Brown gave Millwall a brief scare with a goal on 86 minutes, but Ibane Bowat's late dismissal in stoppage time confirmed Portsmouth's afternoon had unravelled entirely.
Millwall's two central midfielders controlled the tempo from the hour mark onwards, and Swift's double was the decisive contribution in a performance that became more assured as Portsmouth tired.
Recap generated from the event timeline. Editorial team review by request. How we use AI.