Twenty-four seasons, twelve changes of champion, and only one run longer than two — Indianapolis's 2003–07 five-peat. The 2025 ledger the division carries forward: Jacksonville 13-4 (+138), Houston 12-5 (+109), Indianapolis 8-9 despite +54 with a 3-7 one-score record, Tennessee 3-14 (−194) — the league's second-worst. All four clubs open 2026 at home on September 13, and the first division game waits until week 3.
By C. B. Zakarian · Published August 12, 2026
The AFC South has existed for exactly 24 seasons, and its crown has changed hands in 12 of the 23 season-to-season transitions — roughly every other year. Derive every champion from the game file (win percentage, then the official NFL tiebreaker chain — the same code path used in the division-repeats study, which reproduces all 23 tiebreaker-decided titles in the window) and the sequence reads: Tennessee in 2002, then Indianapolis five straight from 2003 to 2007, and after that — nothing longer than two. In the eighteen seasons since 2008, no franchise has held the division more than two years running. Houston went back-to-back in 2023–24 and was dethroned; Jacksonville enters 2026 as the defending champion, carrying its third title in nine seasons and the question of whether it can do what nobody has done here in nearly two decades.
That churn sits mid-pack, not at the extreme: the NFC East changed champions 20 times in the same 23 transitions and the AFC East just 5 (one team, one 11-year run, did most of that). The AFC South's 12 changes place it among the quieter divisions on paper — but its title distribution is unusually flat: Indianapolis 9, Houston 8, Tennessee 4, Jacksonville 3, with the winningest club, Indianapolis, holding zero titles since 2014.
Two panels, both computed from the file: every title from 2002 through 2025 as a season-by-franchise grid, and the 2025 regular-season point differential the four teams carry into 2026, with records and one-score records attached.
The full sequence: TEN, then IND×5, TEN, IND×2, HOU×2, IND×2, HOU×2, JAX, HOU×2, TEN×2, JAX, HOU×2, JAX. Read it as two eras. Through 2014 the division belonged to Indianapolis — nine titles in thirteen seasons, including the 2003–07 run that remains the only streak here longer than two. Since 2017 the crown has rotated among the other three: Jacksonville (2017, 2022, 2025), Houston (2018–19, 2023–24), Tennessee (2020–21), while Indianapolis — still the all-time leader with 9 — has now gone eleven seasons without one.
Whether any of this makes a 2026 repeat more or less likely is a league-wide question, and it is answered on the division-repeats page, which owns the base rates and the full tiebreaker mechanics; this page borrows its champion-derivation code and adds only the AFC South's particulars. Note that 2025 required none of that machinery in this division: Jacksonville's 13-4 cleared Houston's 12-5 outright.
The right panel is the strangest part of the picture. In 2025 the AFC South produced, simultaneously:
So the division enters 2026 spanning nearly the full width of the league: 332 points of differential separate its best team from its worst, and the team in the middle is the one whose record and scoring profile point in opposite directions.
The schedule facts below are read from the file's 2026 rows — opponents, dates, venues only; those games are unplayed and this page predicts nothing about them.
One public file: games.csv from nflverse nfldata, bundled at /data/games.csv. The chart and the full console breakdown — the champion sequence, per-division change counts, and the 2025 ledger — come from explainer_src/make_afc_south_2026_chart.py, which imports the same tiebreaker logic as the division-repeats exhibit. The 2025 ledger itself is a screenful of pandas:
import pandas as pd, numpy as np
df = pd.read_csv("data_layer/games.csv")
reg = df[(df.game_type == "REG") & df.home_score.notna()]
g = reg[reg.season == 2025] # 272 played games
for t in ["JAX", "HOU", "IND", "TEN"]:
m = g[(g.home_team == t) | (g.away_team == t)]
my = np.where(m.home_team == t, m.home_score, m.away_score)
op = np.where(m.home_team == t, m.away_score, m.home_score)
close = np.abs(my - op) <= 8
print(t, f"{(my > op).sum()}-{(my < op).sum()}",
f"{int(my.sum() - op.sum()):+d}",
f"one-score {(close & (my > op)).sum()}-{(close & (my < op)).sum()}")
# JAX 13-4 +138 one-score 6-3 ... IND 8-9 +54 one-score 3-7
# the 12 unplayed 2026 division games (schedule facts only)
AS = {"HOU", "IND", "JAX", "TEN"}
s26 = df[(df.season == 2026) & (df.game_type == "REG")]
dv = s26[s26.home_team.isin(AS) & s26.away_team.isin(AS)]
print(dv[["week", "gameday", "away_team", "home_team"]].to_string())
# first: week 3, HOU at IND ... last two: week 18, Jan 10
All figures on this page were computed 2026-08-12 from the file's played games: the title grid from the 2002–2025 regular seasons, the ledger from the 272 played 2025 regular-season rows, the 2026 items from the schedule fields of that season's unplayed rows. Nothing here is hand-entered.
Data: nflverse/nfldata, public. Champions derived via win percentage plus the official division tiebreaker chain (head-to-head, division record, common games, conference record, strength of victory, strength of schedule, with the multi-club restart rule).
Want the code behind these metrics? Work through the 45-chapter NFL analytics tutorial.
Browse tutorials Free tools