# 2023–24 English Football League

The 2023–24 season is the 125th season of the English Football League (EFL) and the eighth season under that name after it was renamed from The Football League in 2016. For the 11th season, the league is sponsored by Sky Betting & Gaming and is therefore known as the Sky Bet EFL.
The EFL is contested through three divisions: the Championship, League One and League Two. The winner and the runner up of the Championship are automatically promoted to the Premier League and they are joined by the winner of the Championship playoff. The bottom two teams in League Two are relegated to the National League.

## Championship
### Table

| Pos | Team | Pld | W | D | L | GF | GA | GD | Pts | Promotion, qualification or relegation |
| 1 | Leicester City (C, P) | 46 | 31 | 4 | 11 | 89 | 41 | +48 | 97 | Promoted to the Premier League |
| 2 | Ipswich Town (P) | 46 | 28 | 12 | 6 | 92 | 57 | +35 | 96 | Promoted to the Premier League |
| 3 | Leeds United | 46 | 27 | 9 | 10 | 81 | 43 | +38 | 90 | Qualified for the Championship play-offs |
| 4 | Southampton (O, P) | 46 | 26 | 9 | 11 | 87 | 63 | +24 | 87 | Qualified for the Championship play-offs |
| 5 | West Bromwich Albion | 46 | 21 | 12 | 13 | 70 | 47 | +23 | 75 | Qualified for the Championship play-offs |
| 6 | Norwich City | 46 | 21 | 10 | 15 | 79 | 64 | +15 | 73 | Qualified for the Championship play-offs |
| 7 | Hull City | 46 | 19 | 13 | 14 | 68 | 60 | +8 | 70 | |
| 8 | Middlesbrough | 46 | 20 | 9 | 17 | 71 | 62 | +9 | 69 | |
| 9 | Coventry City | 46 | 17 | 13 | 16 | 70 | 59 | +11 | 64 | |
| 10 | Preston North End | 46 | 18 | 9 | 19 | 56 | 67 | −11 | 63 | |
| 11 | Bristol City | 46 | 17 | 11 | 18 | 53 | 51 | +2 | 62 | |
| 12 | Cardiff City | 46 | 19 | 5 | 22 | 53 | 70 | −17 | 62 | |
| 13 | Millwall | 46 | 16 | 11 | 19 | 45 | 55 | −10 | 59 | |
| 14 | Swansea City | 46 | 15 | 12 | 19 | 59 | 65 | −6 | 57 | |
| 15 | Watford | 46 | 13 | 17 | 16 | 61 | 61 | 0 | 56 | |
| 16 | Sunderland | 46 | 16 | 8 | 22 | 52 | 54 | −2 | 56 | |
| 17 | Stoke City | 46 | 15 | 11 | 20 | 49 | 60 | −11 | 56 | |
| 18 | Queens Park Rangers | 46 | 15 | 11 | 20 | 47 | 58 | −11 | 56 | |
| 19 | Blackburn Rovers | 46 | 14 | 11 | 21 | 60 | 74 | −14 | 53 | |
| 20 | Sheffield Wednesday | 46 | 15 | 8 | 23 | 44 | 68 | −24 | 53 | |
| 21 | Plymouth Argyle | 46 | 13 | 12 | 21 | 59 | 70 | −11 | 51 | |
| 22 | Birmingham City (R) | 46 | 13 | 11 | 22 | 50 | 65 | −15 | 50 | Relegated to EFL League One |
| 23 | Huddersfield Town (R) | 46 | 9 | 18 | 19 | 48 | 77 | −29 | 45 | Relegated to EFL League One |
| 24 | Rotherham United (R) | 46 | 5 | 12 | 29 | 37 | 89 | −52 | 27 | Relegated to EFL League One |

### Results

| Home \ Away | BIR | BLB | BRC | CAR | COV | HUD | HUL | IPS | LEE | LEI | MID | MIL | NOR | PLY | PNE | QPR | ROT | SHW | SOU | STO | SUN | SWA | WAT | WBA |
| Birmingham City | — | 1–0 | 0–0 | 0–1 | 3–0 | 4–1 | 0–2 | 2–2 | 1–0 | 2–3 | 0–1 | 1–1 | 1–0 | 2–1 | 1–0 | 0–0 | 0–0 | 2–1 | 3–4 | 1–3 | 2–1 | 2–2 | 0–1 | 3–1 |
| Blackburn Rovers | 4–2 | — | 2–1 | 1–0 | 0–0 | 1–1 | 1–2 | 0–1 | 0–2 | 1–4 | 2–1 | 1–1 | 1–1 | 1–1 | 1–2 | 1–2 | 2–2 | 1–3 | 0–0 | 3–1 | 1–3 | 0–1 | 1–2 | 2–1 |
| Bristol City | 0–2 | 5–0 | — | 0–1 | 1–0 | 1–1 | 3–2 | 0–1 | 0–1 | 1–0 | 3–2 | 0–1 | 1–2 | 4–1 | 1–1 | 0–1 | 2–0 | 1–0 | 3–1 | 2–3 | 1–0 | 1–0 | 1–1 | 0–0 |
| Cardiff City | 0–1 | 0–0 | 2–0 | — | 3–2 | 1–0 | 1–3 | 2–1 | 0–3 | 0–2 | 1–4 | 1–0 | 2–3 | 2–2 | 0–2 | 1–2 | 2–0 | 2–1 | 2–1 | 2–1 | 0–2 | 2–0 | 1–1 | 0–1 |
| Coventry City | 2–0 | 1–0 | 2–2 | 1–2 | — | 1–1 | 2–3 | 1–2 | 2–1 | 3–1 | 3–0 | 2–1 | 1–1 | 1–0 | 0–3 | 1–2 | 5–0 | 2–0 | 1–1 | 0–0 | 0–0 | 2–2 | 3–3 | 0–2 |
| Huddersfield Town | 1–1 | 3–0 | 1–1 | 0–4 | 1–3 | — | 1–2 | 1–1 | 1–1 | 0–1 | 1–2 | 1–0 | 0–4 | 1–1 | 1–3 | 2–1 | 2–0 | 4–0 | 1–1 | 2–2 | 1–0 | 0–4 | 0–0 | 1–4 |
| Hull City | 1–1 | 3–2 | 1–1 | 3–0 | 1–1 | 1–0 | — | 3–3 | 0–0 | 2–2 | 2–2 | 1–0 | 1–2 | 1–1 | 1–0 | 3–0 | 4–1 | 4–2 | 1–2 | 0–2 | 0–1 | 0–1 | 1–2 | 1–1 |
| Ipswich Town | 3–1 | 4–3 | 3–2 | 3–2 | 2–1 | 2–0 | 3–0 | — | 3–4 | 1–1 | 1–1 | 3–1 | 2–2 | 3–2 | 4–2 | 0–0 | 4–3 | 6–0 | 3–2 | 2–0 | 2–1 | 3–2 | 0–0 | 2–2 |
| Leeds United | 3–0 | 0–1 | 2–1 | 2–2 | 1–1 | 4–1 | 3–1 | 4–0 | — | 3–1 | 3–2 | 2–0 | 1–0 | 2–1 | 2–1 | 1–0 | 3–0 | 0–0 | 1–2 | 1–0 | 0–0 | 3–1 | 3–0 | 1–1 |
| Leicester City | 2–1 | 0–2 | 1–0 | 2–1 | 2–1 | 4–1 | 0–1 | 1–1 | 0–1 | — | 1–2 | 3–2 | 3–1 | 4–0 | 3–0 | 1–2 | 3–0 | 2–0 | 5–0 | 2–0 | 1–0 | 3–1 | 2–0 | 2–1 |
| Middlesbrough | 1–0 | 0–0 | 1–2 | 2–0 | 1–3 | 1–1 | 1–2 | 0–2 | 3–4 | 1–0 | — | 0–1 | 3–1 | 0–2 | 4–0 | 0–2 | 1–1 | 2–0 | 2–1 | 0–2 | 1–1 | 2–0 | 3–1 | 1–0 |
| Millwall | 1–0 | 1–2 | 0–1 | 3–1 | 0–3 | 1–1 | 2–2 | 0–4 | 0–3 | 1–0 | 1–3 | — | 1–0 | 1–0 | 1–1 | 2–0 | 3–0 | 0–2 | 0–1 | 1–0 | 1–1 | 0–3 | 1–0 | 1–1 |
| Norwich City | 2–0 | 1–3 | 1–1 | 4–1 | 2–1 | 2–0 | 2–1 | 1–0 | 2–3 | 0–2 | 1–2 | 3–1 | — | 2–1 | 0–0 | 1–0 | 5–0 | 3–1 | 1–1 | 1–0 | 1–0 | 2–2 | 4–2 | 2–0 |
| Plymouth Argyle | 3–3 | 3–0 | 0–1 | 3–1 | 2–2 | 3–1 | 1–0 | 0–2 | 0–2 | 1–0 | 3–3 | 0–2 | 6–2 | — | 0–1 | 1–1 | 3–2 | 3–0 | 1–2 | 2–1 | 2–0 | 1–3 | 3–3 | 0–3 |
| Preston North End | 2–1 | 2–2 | 2–0 | 1–2 | 3–2 | 4–1 | 0–0 | 3–2 | 2–1 | 0–3 | 2–1 | 1–1 | 0–1 | 2–1 | — | 0–2 | 3–0 | 0–1 | 2–2 | 1–2 | 2–1 | 2–1 | 1–5 | 0–4 |
| Queens Park Rangers | 2–1 | 0–4 | 0–0 | 1–2 | 1–3 | 1–1 | 2–0 | 0–1 | 4–0 | 1–2 | 0–2 | 2–0 | 2–2 | 0–0 | 1–0 | — | 2–1 | 0–2 | 0–1 | 4–2 | 1–3 | 1–1 | 1–2 | 2–2 |
| Rotherham United | 0–0 | 2–2 | 1–2 | 5–2 | 2–0 | 0–0 | 1–2 | 2–2 | 1–1 | 1–2 | 1–0 | 2–1 | 2–1 | 0–1 | 1–1 | 1–1 | — | 0–1 | 0–2 | 0–1 | 1–1 | 1–2 | 0–1 | 0–2 |
| Sheffield Wednesday | 2–0 | 3–1 | 2–1 | 1–2 | 1–2 | 0–0 | 3–1 | 0–1 | 0–2 | 1–1 | 1–1 | 0–4 | 2–2 | 1–0 | 0–1 | 2–1 | 2–0 | — | 1–2 | 1–1 | 0–3 | 1–1 | 0–0 | 3–0 |
| Southampton | 3–1 | 4–0 | 1–0 | 2–0 | 2–1 | 5–3 | 1–2 | 0–1 | 3–1 | 1–4 | 1–1 | 1–2 | 4–4 | 2–1 | 3–0 | 2–1 | 1–1 | 4–0 | — | 0–1 | 4–2 | 5–0 | 3–2 | 2–1 |
| Stoke City | 1–2 | 0–3 | 4–0 | 0–0 | 0–1 | 1–1 | 1–3 | 0–0 | 1–0 | 0–5 | 2–0 | 0–0 | 0–3 | 3–0 | 0–2 | 1–0 | 4–1 | 0–1 | 0–1 | — | 2–1 | 1–1 | 1–0 | 2–2 |
| Sunderland | 3–1 | 1–5 | 0–0 | 0–1 | 0–3 | 1–2 | 0–1 | 1–2 | 1–0 | 0–1 | 0–4 | 0–1 | 3–1 | 3–1 | 2–0 | 0–0 | 2–1 | 0–2 | 5–0 | 3–1 | — | 1–2 | 2–0 | 2–1 |
| Swansea City | 1–1 | 2–1 | 1–2 | 2–0 | 1–1 | 1–1 | 2–2 | 1–2 | 0–4 | 1–3 | 1–2 | 0–1 | 2–1 | 0–1 | 2–1 | 0–1 | 1–0 | 3–0 | 1–3 | 3–0 | 0–0 | — | 0–1 | 1–0 |
| Watford | 2–0 | 0–1 | 1–4 | 0–1 | 1–2 | 1–2 | 0–0 | 1–2 | 2–2 | 1–2 | 2–3 | 2–2 | 3–2 | 0–0 | 0–0 | 4–0 | 5–0 | 1–0 | 1–1 | 1–1 | 1–0 | 1–1 | — | 2–2 |
| West Bromwich Albion | 1–0 | 4–1 | 2–0 | 2–0 | 2–1 | 1–2 | 3–1 | 2–0 | 1–0 | 1–2 | 4–2 | 0–0 | 1–0 | 0–0 | 3–0 | 2–0 | 2–0 | 1–0 | 0–2 | 1–1 | 0–1 | 3–2 | 2–2 | — |

### Play-offs

| Semi-finals | Semi-finals | Semi-finals | Semi-finals | Semi-finals | Final | Final | Final |
| 3 | Leeds United | 0 | 4 | 4 | | | |
| 6 | Norwich City | 0 | 0 | 0 | | | |
| 6 | Norwich City | 0 | 0 | 0 | 3 | Leeds United | 0 |
| | | | | | 4 | Southampton | 1 |
| 4 | Southampton | 0 | 3 | 3 | 4 | Southampton | 1 |
| 5 | West Bromwich Albion | 0 | 1 | 1 | | | |

### Semi-finals
#### Second leg

Leeds United won 4–0 on aggregate.
Southampton won 3–1 on aggregate.

### Final
## League One
### Table

| Pos | Team | Pld | W | D | L | GF | GA | GD | Pts | Promotion, qualification or relegation |
| 1 | Portsmouth (C, P) | 46 | 28 | 13 | 5 | 78 | 41 | +37 | 97 | Promoted to EFL Championship |
| 2 | Derby County (P) | 46 | 28 | 8 | 10 | 78 | 37 | +41 | 92 | Promoted to EFL Championship |
| 3 | Bolton Wanderers | 46 | 25 | 12 | 9 | 86 | 51 | +35 | 87 | Qualified for League One play-offs |
| 4 | Peterborough United | 46 | 25 | 9 | 12 | 89 | 61 | +28 | 84 | Qualified for League One play-offs |
| 5 | Oxford United (O, P) | 46 | 22 | 11 | 13 | 79 | 56 | +23 | 77 | Qualified for League One play-offs |
| 6 | Barnsley | 46 | 21 | 13 | 12 | 82 | 64 | +18 | 76 | Qualified for League One play-offs |
| 7 | Lincoln City | 46 | 20 | 14 | 12 | 65 | 40 | +25 | 74 | |
| 8 | Blackpool | 46 | 21 | 10 | 15 | 65 | 48 | +17 | 73 | |
| 9 | Stevenage | 46 | 19 | 14 | 13 | 57 | 46 | +11 | 71 | |
| 10 | Wycombe Wanderers | 46 | 17 | 14 | 15 | 60 | 55 | +5 | 65 | |
| 11 | Leyton Orient | 46 | 18 | 11 | 17 | 53 | 55 | −2 | 65 | |
| 12 | Wigan Athletic | 46 | 20 | 10 | 16 | 63 | 56 | +7 | 62 | |
| 13 | Exeter City | 46 | 17 | 10 | 19 | 46 | 61 | −15 | 61 | |
| 14 | Northampton Town | 46 | 17 | 9 | 20 | 57 | 66 | −9 | 60 | |
| 15 | Bristol Rovers | 46 | 16 | 9 | 21 | 52 | 68 | −16 | 57 | |
| 16 | Charlton Athletic | 46 | 11 | 20 | 15 | 64 | 65 | −1 | 53 | |
| 17 | Reading | 46 | 16 | 11 | 19 | 68 | 70 | −2 | 53 | |
| 18 | Cambridge United | 46 | 12 | 12 | 22 | 39 | 61 | −22 | 48 | |
| 19 | Shrewsbury Town | 46 | 13 | 9 | 24 | 35 | 67 | −32 | 48 | |
| 20 | Burton Albion | 46 | 12 | 10 | 24 | 39 | 67 | −28 | 46 | |
| 21 | Cheltenham Town (R) | 46 | 12 | 8 | 26 | 41 | 65 | −24 | 44 | Relegated to EFL League Two |
| 22 | Fleetwood Town (R) | 46 | 10 | 13 | 23 | 49 | 72 | −23 | 43 | Relegated to EFL League Two |
| 23 | Port Vale (R) | 46 | 10 | 11 | 25 | 41 | 74 | −33 | 41 | Relegated to EFL League Two |
| 24 | Carlisle United (R) | 46 | 7 | 9 | 30 | 41 | 81 | −40 | 30 | Relegated to EFL League Two |
* ↑ On 19 May 2023, Wigan Athletic were deducted four points for failing to pay players and staff on time following previous EFL rules breaches in the 2022–23 season. Another four-point deduction was applied on 26 May, after the club's owners missed a deadline to deposit an amount equalling 125% of its monthly wage bill.
* ↑ On 16 August 2023, Reading were deducted one point for failing to pay players on time and in full on three occasions in the 2022–23 season. Another 3-point deduction was applied on 13 September, for failing to deposit wages on time. Another 2-point deduction was applied on 27 February, due to late HMRC payments.

### Results

| Home \ Away | BAR | BLA | BOL | BRI | BRT | CAM | CAR | CHA | CHE | DER | EXE | FLE | LEY | LIN | NOR | OXF | PET | POR | PVL | REA | SHR | STE | WIG | WYC |
| Barnsley | — | 0–1 | 2–2 | 2–1 | 2–0 | 0–2 | 2–1 | 1–1 | 0–0 | 2–1 | 1–2 | 2–2 | 2–1 | 1–5 | 1–1 | 1–3 | 1–3 | 2–3 | 7–0 | 2–2 | 3–0 | 2–1 | 1–1 | 1–0 |
| Blackpool | 3–2 | — | 4–1 | 3–1 | 2–0 | 1–0 | 3–0 | 1–1 | 3–2 | 1–3 | 2–0 | 1–0 | 0–0 | 2–0 | 1–2 | 1–1 | 2–4 | 0–0 | 0–0 | 4–1 | 4–0 | 3–0 | 2–1 | 0–0 |
| Bolton Wanderers | 1–1 | 1–0 | — | 1–2 | 1–0 | 2–0 | 1–3 | 3–3 | 1–0 | 2–1 | 7–0 | 3–1 | 3–2 | 3–0 | 2–1 | 5–0 | 1–1 | 1–1 | 2–0 | 5–2 | 2–2 | 3–2 | 0–4 | 2–1 |
| Bristol Rovers | 1–1 | 1–2 | 0–2 | — | 1–2 | 1–0 | 2–1 | 2–1 | 1–1 | 0–3 | 0–1 | 0–2 | 1–1 | 1–1 | 2–1 | 3–1 | 0–2 | 2–1 | 3–0 | 0–2 | 0–0 | 1–1 | 4–1 | 1–2 |
| Burton Albion | 1–3 | 1–0 | 1–1 | 4–1 | — | 2–1 | 0–1 | 2–0 | 1–2 | 0–3 | 0–1 | 1–1 | 0–0 | 0–1 | 0–2 | 0–4 | 1–3 | 0–2 | 0–1 | 3–2 | 1–0 | 1–2 | 2–1 | 1–1 |
| Cambridge United | 0–4 | 2–1 | 1–2 | 2–0 | 0–0 | — | 1–0 | 1–1 | 0–1 | 0–1 | 2–0 | 2–1 | 0–2 | 0–3 | 1–1 | 2–0 | 0–1 | 0–0 | 1–1 | 1–0 | 1–1 | 1–2 | 3–1 | 1–1 |
| Carlisle United | 2–3 | 0–1 | 1–4 | 0–1 | 2–1 | 0–4 | — | 1–1 | 0–1 | 0–2 | 0–2 | 1–1 | 0–1 | 1–3 | 2–2 | 1–3 | 1–1 | 0–1 | 2–1 | 1–3 | 2–0 | 2–2 | 1–1 | 1–3 |
| Charlton Athletic | 2–1 | 2–2 | 0–2 | 1–2 | 1–1 | 2–2 | 3–2 | — | 2–1 | 0–1 | 4–1 | 2–1 | 1–0 | 1–1 | 2–3 | 1–2 | 1–2 | 0–0 | 2–3 | 4–0 | 1–1 | 0–0 | 2–2 | 3–1 |
| Cheltenham Town | 0–2 | 2–0 | 0–3 | 1–3 | 0–0 | 1–0 | 0–1 | 1–3 | — | 1–1 | 1–2 | 0–2 | 1–2 | 1–2 | 0–1 | 2–0 | 2–0 | 2–1 | 3–2 | 2–2 | 2–0 | 0–3 | 1–1 | 1–3 |
| Derby County | 3–0 | 1–0 | 1–0 | 2–1 | 3–2 | 0–0 | 2–0 | 1–2 | 2–1 | — | 2–0 | 1–0 | 3–0 | 3–1 | 4–0 | 1–2 | 2–3 | 1–1 | 3–0 | 2–1 | 1–1 | 1–0 | 1–2 | 1–1 |
| Exeter City | 0–1 | 0–0 | 2–2 | 0–1 | 1–0 | 0–0 | 2–1 | 1–1 | 1–0 | 0–3 | — | 1–1 | 1–2 | 1–1 | 0–2 | 1–2 | 2–1 | 0–0 | 0–1 | 2–1 | 0–0 | 1–0 | 0–2 | 1–0 |
| Fleetwood Town | 1–2 | 3–3 | 0–2 | 0–0 | 3–0 | 0–2 | 1–1 | 1–1 | 1–2 | 1–3 | 3–0 | — | 1–0 | 0–1 | 2–0 | 0–3 | 0–1 | 0–1 | 3–0 | 1–1 | 0–1 | 0–3 | 4–2 | 1–4 |
| Leyton Orient | 1–1 | 1–0 | 1–0 | 0–1 | 1–2 | 2–0 | 3–2 | 1–0 | 3–1 | 0–3 | 2–2 | 0–1 | — | 0–1 | 4–3 | 2–3 | 1–2 | 0–4 | 0–0 | 2–1 | 1–0 | 0–3 | 1–1 | 0–0 |
| Lincoln City | 2–2 | 3–0 | 0–1 | 5–0 | 0–1 | 6–0 | 1–1 | 3–1 | 2–0 | 0–0 | 1–0 | 2–1 | 1–0 | — | 1–2 | 0–2 | 0–0 | 0–2 | 1–1 | 1–1 | 3–0 | 0–0 | 1–2 | 3–0 |
| Northampton Town | 1–2 | 0–1 | 1–1 | 3–1 | 2–0 | 2–1 | 2–0 | 1–1 | 1–0 | 1–0 | 1–2 | 3–0 | 2–2 | 2–2 | — | 2–1 | 1–0 | 0–3 | 2–0 | 3–1 | 0–2 | 0–1 | 1–1 | 0–1 |
| Oxford United | 0–1 | 1–1 | 0–0 | 2–1 | 3–0 | 2–1 | 1–0 | 2–1 | 2–1 | 2–3 | 3–0 | 4–0 | 1–2 | 0–1 | 2–2 | — | 5–0 | 2–2 | 1–2 | 1–1 | 3–0 | 1–1 | 4–2 | 2–2 |
| Peterborough United | 2–2 | 1–2 | 3–3 | 2–0 | 4–0 | 5–0 | 1–3 | 1–0 | 3–0 | 2–4 | 2–1 | 4–1 | 1–1 | 2–0 | 5–1 | 3–0 | — | 0–1 | 3–0 | 2–2 | 2–1 | 3–1 | 2–3 | 2–2 |
| Portsmouth | 3–2 | 0–4 | 2–0 | 1–1 | 2–1 | 3–1 | 1–0 | 2–2 | 0–0 | 2–2 | 1–0 | 1–1 | 0–3 | 2–1 | 4–1 | 2–1 | 3–1 | — | 2–0 | 4–1 | 3–1 | 2–1 | 1–2 | 2–1 |
| Port Vale | 2–3 | 3–0 | 0–1 | 2–0 | 2–3 | 0–0 | 1–0 | 3–3 | 1–2 | 0–1 | 2–4 | 2–2 | 0–1 | 0–2 | 1–0 | 0–2 | 0–1 | 0–1 | — | 1–0 | 1–2 | 2–2 | 3–2 | 1–2 |
| Reading | 1–3 | 3–2 | 2–1 | 1–1 | 0–0 | 4–0 | 5–1 | 2–0 | 1–0 | 1–0 | 3–2 | 1–2 | 1–1 | 1–1 | 1–0 | 1–1 | 0–1 | 2–3 | 2–0 | — | 2–3 | 2–0 | 2–0 | 1–2 |
| Shrewsbury Town | 1–1 | 0–2 | 0–2 | 0–2 | 2–1 | 1–2 | 1–0 | 0–0 | 1–0 | 1–0 | 0–3 | 3–1 | 1–3 | 0–1 | 1–0 | 1–1 | 1–2 | 0–3 | 2–1 | 3–2 | — | 0–1 | 0–1 | 0–2 |
| Stevenage | 2–1 | 1–0 | 0–0 | 2–3 | 1–2 | 1–0 | 2–2 | 1–1 | 2–1 | 3–1 | 1–1 | 0–0 | 0–1 | 1–0 | 3–0 | 1–3 | 2–2 | 0–0 | 0–0 | 0–1 | 2–0 | — | 1–0 | 1–0 |
| Wigan Athletic | 0–2 | 1–0 | 1–0 | 2–0 | 1–1 | 2–1 | 2–0 | 2–3 | 1–1 | 0–1 | 1–2 | 3–0 | 1–0 | 0–0 | 2–1 | 2–0 | 2–1 | 1–2 | 0–0 | 1–0 | 2–0 | 2–3 | — | 1–0 |
| Wycombe Wanderers | 2–4 | 2–0 | 2–4 | 3–2 | 0–0 | 0–0 | 2–0 | 1–0 | 2–0 | 0–0 | 0–3 | 2–2 | 3–2 | 1–1 | 2–0 | 0–0 | 5–2 | 1–3 | 1–1 | 1–2 | 0–1 | 0–1 | 1–0 | — |

### Play-offs

| Semi-finals | Semi-finals | Semi-finals | Semi-finals | Semi-finals | Final | Final | Final |
| 6 | Barnsley | 1 | 3 | 4 | | | |
| 3 | Bolton Wanderers | 3 | 2 | 5 | | | |
| 3 | Bolton Wanderers | 3 | 2 | 5 | 3 | Bolton Wanderers | 0 |
| | | | | | 5 | Oxford United | 2 |
| 5 | Oxford United | 1 | 1 | 2 | 5 | Oxford United | 2 |
| 4 | Peterborough United | 0 | 1 | 1 | | | |
First leg
Second leg
Bolton Wanderers won 5-4 on aggregate.
Oxford United won 2-1 on aggregate.

### Final
## League Two
### Table

| Pos | Team | Pld | W | D | L | GF | GA | GD | Pts | Promotion, qualification or relegation |
| 1 | Stockport County (C, P) | 46 | 27 | 11 | 8 | 96 | 48 | +48 | 92 | Promoted to EFL League One |
| 2 | Wrexham (P) | 46 | 26 | 10 | 10 | 89 | 52 | +37 | 88 | Promoted to EFL League One |
| 3 | Mansfield Town (P) | 46 | 24 | 14 | 8 | 90 | 47 | +43 | 86 | Promoted to EFL League One |
| 4 | Milton Keynes Dons | 46 | 23 | 9 | 14 | 83 | 68 | +15 | 78 | Qualified for League Two play-offs |
| 5 | Doncaster Rovers | 46 | 21 | 8 | 17 | 73 | 68 | +5 | 71 | Qualified for League Two play-offs |
| 6 | Crewe Alexandra | 46 | 19 | 14 | 13 | 69 | 65 | +4 | 71 | Qualified for League Two play-offs |
| 7 | Crawley Town (O, P) | 46 | 21 | 7 | 18 | 73 | 67 | +6 | 70 | Qualified for League Two play-offs |
| 8 | Barrow | 46 | 18 | 15 | 13 | 62 | 56 | +6 | 69 | |
| 9 | Bradford City | 46 | 19 | 12 | 15 | 61 | 59 | +2 | 69 | |
| 10 | AFC Wimbledon | 46 | 17 | 14 | 15 | 64 | 51 | +13 | 65 | |
| 11 | Walsall | 46 | 18 | 11 | 17 | 69 | 73 | −4 | 65 | |
| 12 | Gillingham | 46 | 18 | 10 | 18 | 46 | 57 | −11 | 64 | |
| 13 | Harrogate Town | 46 | 17 | 12 | 17 | 60 | 69 | −9 | 63 | |
| 14 | Notts County | 46 | 18 | 7 | 21 | 89 | 86 | +3 | 61 | |
| 15 | Morecambe | 46 | 17 | 10 | 19 | 67 | 81 | −14 | 58 | |
| 16 | Tranmere Rovers | 46 | 17 | 6 | 23 | 67 | 70 | −3 | 57 | |
| 17 | Accrington Stanley | 46 | 16 | 9 | 21 | 63 | 71 | −8 | 57 | |
| 18 | Newport County | 46 | 16 | 7 | 23 | 62 | 76 | −14 | 55 | |
| 19 | Swindon Town | 46 | 14 | 12 | 20 | 77 | 83 | −6 | 54 | |
| 20 | Salford City | 46 | 13 | 12 | 21 | 66 | 82 | −16 | 51 | |
| 21 | Grimsby Town | 46 | 11 | 16 | 19 | 57 | 74 | −17 | 49 | |
| 22 | Colchester United | 46 | 11 | 12 | 23 | 59 | 80 | −21 | 45 | |
| 23 | Sutton United (R) | 46 | 9 | 15 | 22 | 59 | 84 | −25 | 42 | Relegated to National League |
| 24 | Forest Green Rovers (R) | 46 | 11 | 9 | 26 | 44 | 78 | −34 | 42 | Relegated to National League |
* ↑ On 3 October, the original fixture was abandoned in the 84th minute, due to a fatality in the crowd. On 16 October, the EFL announced that the game will be replayed in full
* ↑ On 11 April 2024, Morecambe were deducted three points for failing to pay players and staff on time following previous EFL rules breaches in the 2023–24 season.

### Results

| Home \ Away | ACC | WIM | BAR | BRA | COL | CRA | CRE | DON | FOR | GIL | GRI | HAR | MAN | MIL | MOR | NEW | NCO | SAL | STO | SUT | SWI | TRA | WAL | WRE |
| Accrington Stanley | — | 2–0 | 1–1 | 0–3 | 0–1 | 0–1 | 0–0 | 0–0 | 2–1 | 1–2 | 0–0 | 2–1 | 0–3 | 1–0 | 1–2 | 3–0 | 2–2 | 3–0 | 1–3 | 4–1 | 3–4 | 4–1 | 2–1 | 2–0 |
| AFC Wimbledon | 2–4 | — | 2–0 | 0–1 | 5–3 | 0–1 | 2–2 | 2–0 | 1–1 | 2–0 | 0–0 | 1–1 | 2–1 | 1–0 | 1–1 | 0–2 | 4–2 | 1–0 | 1–2 | 0–1 | 4–0 | 4–1 | 5–1 | 1–1 |
| Barrow | 1–1 | 0–0 | — | 1–2 | 2–0 | 1–0 | 1–3 | 3–2 | 1–2 | 2–0 | 3–1 | 0–0 | 1–1 | 1–0 | 1–0 | 1–0 | 1–1 | 0–0 | 2–2 | 2–1 | 0–2 | 1–0 | 2–0 | 1–1 |
| Bradford City | 1–0 | 0–0 | 1–2 | — | 2–1 | 2–4 | 1–0 | 1–1 | 0–2 | 1–0 | 1–1 | 1–1 | 1–5 | 4–0 | 2–2 | 4–1 | 0–3 | 1–1 | 0–0 | 1–0 | 1–0 | 2–0 | 1–3 | 1–1 |
| Colchester United | 1–1 | 0–2 | 1–4 | 1–1 | — | 1–2 | 1–1 | 1–4 | 3–3 | 0–1 | 2–0 | 1–2 | 1–1 | 2–3 | 1–3 | 2–1 | 5–4 | 2–1 | 1–2 | 1–1 | 3–1 | 2–0 | 1–1 | 1–2 |
| Crawley Town | 3–1 | 1–2 | 1–1 | 1–0 | 2–3 | — | 2–4 | 0–2 | 2–0 | 0–1 | 2–0 | 2–1 | 1–3 | 2–1 | 1–2 | 4–1 | 2–1 | 0–1 | 1–1 | 3–0 | 3–1 | 3–2 | 1–1 | 0–1 |
| Crewe Alexandra | 3–3 | 1–1 | 1–3 | 1–0 | 2–1 | 1–0 | — | 3–2 | 0–3 | 2–0 | 0–3 | 0–0 | 2–2 | 3–1 | 2–3 | 4–2 | 1–0 | 2–3 | 0–2 | 1–0 | 2–1 | 2–0 | 2–2 | 0–3 |
| Doncaster Rovers | 4–0 | 1–0 | 4–2 | 1–3 | 3–1 | 2–0 | 2–0 | — | 2–0 | 2–1 | 1–0 | 0–1 | 2–2 | 3–0 | 0–5 | 0–1 | 1–3 | 0–3 | 1–5 | 4–1 | 0–0 | 2–1 | 2–1 | 1–0 |
| Forest Green Rovers | 0–1 | 1–1 | 0–2 | 0–3 | 5–0 | 2–1 | 1–4 | 1–2 | — | 0–0 | 2–2 | 0–2 | 0–4 | 0–2 | 1–2 | 0–3 | 1–0 | 0–2 | 0–3 | 0–1 | 1–2 | 1–0 | 2–0 | 1–1 |
| Gillingham | 1–0 | 1–0 | 3–0 | 0–2 | 0–3 | 0–2 | 0–0 | 2–2 | 1–1 | — | 1–1 | 1–0 | 1–1 | 2–1 | 2–1 | 0–2 | 1–2 | 3–1 | 0–0 | 1–0 | 2–2 | 1–1 | 1–1 | 1–0 |
| Grimsby Town | 0–2 | 0–0 | 2–1 | 1–1 | 2–3 | 2–3 | 2–1 | 1–5 | 1–0 | 2–0 | — | 1–2 | 1–1 | 1–0 | 3–2 | 1–0 | 5–5 | 2–0 | 1–3 | 1–1 | 2–0 | 1–2 | 1–6 | 1–3 |
| Harrogate Town | 2–1 | 0–1 | 0–1 | 3–0 | 1–0 | 1–2 | 0–1 | 3–1 | 0–1 | 5–1 | 1–0 | — | 1–4 | 3–5 | 2–0 | 1–4 | 3–1 | 3–2 | 1–3 | 2–2 | 1–1 | 0–2 | 0–2 | 2–2 |
| Mansfield Town | 2–1 | 0–0 | 1–0 | 0–0 | 1–1 | 1–4 | 0–1 | 1–1 | 1–0 | 2–1 | 2–0 | 9–2 | — | 1–2 | 3–0 | 2–0 | 1–0 | 5–1 | 3–2 | 1–1 | 3–2 | 2–2 | 2–1 | 0–0 |
| Milton Keynes Dons | 2–1 | 3–1 | 2–2 | 4–1 | 1–0 | 2–0 | 3–1 | 2–1 | 2–0 | 2–1 | 1–1 | 0–1 | 1–4 | — | 1–2 | 3–0 | 1–1 | 3–1 | 1–2 | 4–4 | 3–2 | 1–0 | 5–0 | 1–1 |
| Morecambe | 1–1 | 4–1 | 2–1 | 3–0 | 0–1 | 1–0 | 0–1 | 0–3 | 1–2 | 2–3 | 1–1 | 2–2 | 1–1 | 1–3 | — | 1–2 | 0–0 | 1–0 | 1–1 | 1–0 | 2–2 | 1–0 | 2–1 | 1–3 |
| Newport County | 1–3 | 2–2 | 1–1 | 1–4 | 2–1 | 0–4 | 1–1 | 4–0 | 4–2 | 1–0 | 1–1 | 1–2 | 0–1 | 0–0 | 5–3 | — | 1–3 | 0–1 | 2–1 | 3–1 | 2–1 | 1–2 | 3–3 | 1–0 |
| Notts County | 3–1 | 0–2 | 1–1 | 4–2 | 1–0 | 3–1 | 1–3 | 3–0 | 4–3 | 1–3 | 3–2 | 3–0 | 1–4 | 3–3 | 5–0 | 3–0 | — | 1–2 | 2–5 | 3–4 | 3–1 | 2–1 | 1–2 | 0–2 |
| Salford City | 1–2 | 0–0 | 5–3 | 1–2 | 1–1 | 1–1 | 4–2 | 2–2 | 2–2 | 0–2 | 0–3 | 2–2 | 1–2 | 2–4 | 3–1 | 2–1 | 0–2 | — | 2–2 | 1–2 | 2–2 | 1–5 | 1–2 | 3–1 |
| Stockport County | 4–2 | 1–0 | 1–0 | 1–1 | 2–0 | 3–3 | 1–3 | 1–0 | 2–0 | 0–1 | 3–2 | 1–1 | 0–2 | 5–0 | 2–0 | 1–0 | 2–1 | 0–0 | — | 8–0 | 0–0 | 2–0 | 3–1 | 5–0 |
| Sutton United | 3–1 | 0–3 | 2–2 | 2–1 | 1–1 | 2–2 | 1–1 | 1–1 | 0–1 | 0–1 | 1–1 | 1–2 | 0–2 | 1–1 | 2–3 | 1–1 | 5–1 | 0–2 | 1–3 | — | 3–1 | 1–1 | 4–0 | 1–2 |
| Swindon Town | 1–2 | 3–2 | 0–3 | 2–0 | 2–2 | 6–0 | 2–2 | 1–2 | 2–1 | 0–1 | 2–1 | 1–1 | 2–1 | 1–2 | 3–3 | 2–0 | 2–1 | 1–1 | 2–4 | 5–3 | — | 3–1 | 2–0 | 0–1 |
| Tranmere Rovers | 2–0 | 3–2 | 1–2 | 2–1 | 1–1 | 1–3 | 0–0 | 1–2 | 3–0 | 3–1 | 2–2 | 3–0 | 2–1 | 1–2 | 2–3 | 2–1 | 4–2 | 3–4 | 4–0 | 1–0 | 2–1 | — | 1–3 | 0–1 |
| Walsall | 2–1 | 1–3 | 1–1 | 2–3 | 1–0 | 1–1 | 2–0 | 3–1 | 0–0 | 4–1 | 1–1 | 0–1 | 2–1 | 0–0 | 3–0 | 0–3 | 1–3 | 2–1 | 2–1 | 1–1 | 2–1 | 1–0 | — | 3–1 |
| Wrexham | 4–0 | 2–0 | 4–1 | 0–1 | 2–1 | 4–1 | 3–3 | 2–1 | 6–0 | 2–0 | 3–0 | 0–0 | 2–0 | 3–5 | 6–0 | 2–0 | 1–0 | 3–2 | 2–1 | 2–1 | 5–5 | 0–1 | 4–2 | — |

### Play-offs

| Semi-finals | Semi-finals | Semi-finals | Semi-finals | Semi-finals | Final | Final | Final |
| 7 | Crawley Town | 3 | 5 | 8 | | | |
| 4 | Milton Keynes Dons | 0 | 1 | 1 | | | |
| 4 | Milton Keynes Dons | 0 | 1 | 1 | 7 | Crawley Town | 2 |
| | | | | | 6 | Crewe Alexandra | 0 |
| 6 | Crewe Alexandra | 0 | 2 | 2 (4) | 6 | Crewe Alexandra | 0 |
| 5 | Doncaster Rovers | 2 | 0 | 2 (3) | | | |
First leg
Second leg

### Final
## Managerial changes

| Team | Outgoing manager | Manner of departure | Date of vacancy | Position in table | Incoming manager | Date of appointment | Position in table |
| Reading | Paul Ince | Sacked | 11 April 2023 | 2022–23 English Football League | Rubén Sellés | 26 June 2023 | Pre-season |
| Watford | Chris Wilder | End of contract | 3 May 2023 | Pre-season | Valérien Ismaël | 10 May 2023 | Pre-season |
| Swindon Town | Steve Mildenhall Gavin Gunning | End of interim spell | 8 May 2023 | Pre-season | Michael Flynn | 8 May 2023 | Pre-season |
| Doncaster Rovers | Danny Schofield | Sacked | 9 May 2023 | Pre-season | Grant McCann | 12 May 2023 | Pre-season |
| Milton Keynes Dons | Mark Jackson | Sacked | 9 May 2023 | Pre-season | Graham Alexander | 27 May 2023 | Pre-season |
| Cardiff City | Sabri Lamouchi | End of contract | 16 May 2023 | Pre-season | Erol Bulut | 3 June 2023 | Pre-season |
| Southampton | Rubén Sellés | End of contract | 28 May 2023 | Pre-season | Russell Martin | 21 June 2023 | Pre-season |
| Leicester City | Dean Smith | End of contract | 28 May 2023 | Pre-season | Enzo Maresca | 16 June 2023 | Pre-season |
| Leeds United | Sam Allardyce | Mutual consent | 2 June 2023 | Pre-season | Daniel Farke | 4 July 2023 | Pre-season |
| Shrewsbury Town | Steve Cotterill | Resigned | 6 June 2023 | Pre-season | Matthew Taylor | 26 June 2023 | Pre-season |
| Sheffield Wednesday | Darren Moore | Mutual consent | 19 June 2023 | Pre-season | Xisco Muñoz | 4 July 2023 | Pre-season |
| Swansea City | Russell Martin | Appointed Southampton manager | 21 June 2023 | Pre-season | Michael Duff | 22 June 2023 | Pre-season |
| Barnsley | Michael Duff | Appointed Swansea City manager | 22 June 2023 | Pre-season | Neill Collins | 6 July 2023 | Pre-season |
| Forest Green Rovers | Duncan Ferguson | Sacked | 4 July 2023 | Pre-season | David Horseman | 17 July 2023 | Pre-season |
| Charlton Athletic | Dean Holden | Sacked | 27 August 2023 | 19th | Michael Appleton | 8 September 2023 | 19th |
| Fleetwood Town | Scott Brown | Sacked | 3 September 2023 | 23rd | Lee Johnson | 10 September 2023 | 23rd |
| Tranmere Rovers | Ian Dawes | Sacked | 10 September 2023 | 22nd | Nigel Adkins | 2 November 2023 | 23rd |
| Huddersfield Town | Neil Warnock | Sacked | 20 September 2023 | 16th | Darren Moore | 21 September 2023 | 16th |
| Cheltenham Town | Wade Elliott | Mutual consent | 20 September 2023 | 24th | Darrell Clarke | 29 September 2023 | 24th |
| Bradford City | Mark Hughes | Sacked | 4 October 2023 | 18th | Graham Alexander | 6 November 2023 | 16th |
| Sheffield Wednesday | Xisco Muñoz | Sacked | 4 October 2023 | 24th | Danny Röhl | 13 October 2023 | 24th |
| Gillingham | Neil Harris | Sacked | 5 October 2023 | 8th | Stephen Clemence | 1 November 2023 | 9th |
| Birmingham City | John Eustace | Sacked | 9 October 2023 | 6th | Wayne Rooney | 11 October 2023 | 6th |
| Milton Keynes Dons | Graham Alexander | Sacked | 16 October 2023 | 16th | Mike Williamson | 17 October 2023 | 16th |
| Lincoln City | Mark Kennedy | Sacked | 18 October 2023 | 16th | Michael Skubala | 14 November 2023 | 9th |
| Millwall | Gary Rowett | Mutual consent | 18 October 2023 | 15th | Joe Edwards | 6 November 2023 | 18th |
| Colchester United | Ben Garner | Sacked | 21 October 2023 | 22nd | Matthew Etherington | 16 November 2023 | 16th |
| Bristol Rovers | Joey Barton | Sacked | 26 October 2023 | 16th | Matt Taylor | 1 December 2023 | 11th |
| Grimsby Town | Paul Hurst | Sacked | 28 October 2023 | 21st | David Artell | 27 November 2023 | 21st |
| Queens Park Rangers | Gareth Ainsworth | Sacked | 28 October 2023 | 23rd | Martí Cifuentes | 30 October 2023 | 23rd |
| Bristol City | Nigel Pearson | Sacked | 29 October 2023 | 15th | Liam Manning | 7 November 2023 | 10th |
| Oxford United | Liam Manning | Appointed Bristol City manager | 7 November 2023 | 2nd | Des Buckingham | 16 November 2023 | 2nd |
| Rotherham United | Matt Taylor | Sacked | 13 November 2023 | 22nd | Leam Richardson | 11 December 2023 | 23rd |
| Morecambe | Derek Adams | Appointed Ross County manager | 20 November 2023 | 9th | Ged Brannan | 27 November 2023 | 12th |
| Cambridge United | Mark Bonner | Sacked | 29 November 2023 | 18th | Neil Harris | 6 December 2023 | 18th |
| Swansea City | Michael Duff | Sacked | 4 December 2023 | 18th | Luke Williams | 5 January 2024 | 16th |
| Sunderland | Tony Mowbray | Sacked | 4 December 2023 | 9th | Michael Beale | 18 December 2023 | 7th |
| Burton Albion | Dino Maamria | Sacked | 9 December 2023 | 19th | Martin Paterson | 11 January 2024 | 17th |
| Stoke City | Alex Neil | Sacked | 10 December 2023 | 20th | Steven Schumacher | 19 December 2023 | 19th |
| Plymouth Argyle | Steven Schumacher | Appointed Stoke City manager | 19 December 2023 | 16th | Ian Foster | 5 January 2024 | 18th |
| Sutton United | Matt Gray | Sacked | 19 December 2023 | 24th | Steve Morison | 6 January 2024 | 24th |
| Forest Green Rovers | David Horseman | Mutual consent | 20 December 2023 | 23rd | Troy Deeney | 20 December 2023 | 23rd |
| Salford City | Neil Wood | Sacked | 27 December 2023 | 21st | Karl Robinson | 5 January 2024 | 21st |
| Fleetwood Town | Lee Johnson | Sacked | 30 December 2023 | 23rd | Charlie Adam | 31 December 2023 | 23rd |
| Colchester United | Matthew Etherington | Sacked | 1 January 2024 | 22nd | Danny Cowley | 4 January 2024 | 22nd |
| Birmingham City | Wayne Rooney | Sacked | 2 January 2024 | 20th | Tony Mowbray | 8 January 2024 | 20th |
| Notts County | Luke Williams | Appointed Swansea City manager | 5 January 2024 | 5th | Stuart Maynard | 18 January 2024 | 6th |
| Swindon Town | Michael Flynn | Mutual consent | 15 January 2024 | 15th | Mark Kennedy | 29 May 2024 | 2024–25 English Football League |
| Forest Green Rovers | Troy Deeney | Sacked | 18 January 2024 | 24th | Steve Cotterill | 25 January 2023 | 24th |
| Shrewsbury Town | Matt Taylor | Sacked | 21 January 2024 | 19th | Paul Hurst | 24 January 2024 | 20th |
| Charlton Athletic | Michael Appleton | Sacked | 24 January 2024 | 16th | Nathan Jones | 4 February 2024 | 19th |
| Huddersfield Town | Darren Moore | Sacked | 29 January 2024 | 21st | Andre Breitenreiter | 15 February 2024 | 20th |
| Port Vale | Andy Crosby | Sacked | 5 February 2024 | 20th | Darren Moore | 13 February 2024 | 21st |
| Blackburn Rovers | Jon Dahl Tomasson | Mutual consent | 9 February 2024 | 18th | John Eustace | 9 February 2024 | 18th |
| Sunderland | Michael Beale | Sacked | 19 February 2024 | 10th | Régis Le Bris | 22 June 2024 | 2024–25 English Football League |
| Millwall | Joe Edwards | Sacked | 21 February 2024 | 21st | Neil Harris | 21 February 2024 | 21st |
| Cambridge United | Neil Harris | Appointed Millwall manager | 21 February 2024 | 17th | Garry Monk | 4 March 2024 | 19th |
| Accrington Stanley | John Coleman | Sacked | 3 March 2024 | 16th | John Doolan | 22 March 2024 | 16th |
| Watford | Valérien Ismaël | Sacked | 9 March 2024 | 13th | Tom Cleverley | 24 April 2024 | 15th |
| Plymouth Argyle | Ian Foster | Sacked | 1 April 2024 | 21st | Wayne Rooney | 25 May 2024 | 2024–25 English Football League |
| Rotherham United | Leam Richardson | Sacked | 17 April 2024 | 24th | Steve Evans | 17 April 2024 | 24th |
| Stevenage | Steve Evans | Appointed Rotherham United manager | 17 April 2024 | 9th | Alex Revell | 9 May 2024 | 2024–25 English Football League |
| Barnsley | Neill Collins | Sacked | 22 April 2024 | 5th | Darrell Clarke | 23 May 2024 | 2024–25 English Football League |