FIFA World Cup 2026 · Knockout Stage

Knockout Bracket

R32 → R16 → QF → SF → Final, resolved live from the OpenLink FIFA Knowledge Graph. Hover any team name to see their group standing — click to explore in the Knowledge Graph.

Initialising…

Knockout Stage

Knockout Bracket

Win Probability Model

Head-to-head odds from the Elo “SUM” model: P = 1 / (1 + 10(−Δpts/600)). FIFA Rank uses the full FIFA/Coca-Cola World Ranking. This World Cup Only is self-contained: all 48 teams seed at 1000 (equal), so We = 0.5 always and ratings are built purely from 2026 results (I·(W−0.5) per match, WC weights). Round of 32 uses the live matchups as they stand; deeper rounds project the favourite through to the Final.

M74
Winner Group E
vs
Best 3rd A/B/C/D/F
M77
Winner Group I
vs
Best 3rd C/D/F/G/H
M73
Runner-up Group A
vs
Runner-up Group B
M75
Winner Group F
vs
Runner-up Group C
M83
Runner-up Group K
vs
Runner-up Group L
M84
Winner Group H
vs
Runner-up Group J
M81
Winner Group D
vs
Best 3rd B/E/F/I/J
M82
Winner Group G
vs
Best 3rd A/E/H/I/J
R16 · M89
vs
R16 · M90
vs
R16 · M93
vs
R16 · M94
vs
QF · M97
vs
QF · M98
vs
SF · M101
vs
🏆
FINAL
Final · M104
vs
Jul 19, 2026
SF · M102
vs
QF · M99
vs
QF · M100
vs
R16 · M91
vs
R16 · M92
vs
R16 · M95
vs
R16 · M96
vs
M76
Winner Group C
vs
Runner-up Group F
M78
Runner-up Group E
vs
Runner-up Group I
M79
Winner Group A
vs
Best 3rd C/E/F/H/I
M80
Winner Group L
vs
Best 3rd E/H/I/J/K
M86
Winner Group J
vs
Runner-up Group H
M88
Runner-up Group D
vs
Runner-up Group G
M85
Winner Group B
vs
Best 3rd E/F/G/I/J
M87
Winner Group K
vs
Best 3rd D/E/I/J/L
Tournament

Group Stage

Current standings and results for all 12 groups, with Round of 32 outlook for each qualifying position.

Group A
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group A — match results
Loading…
Group B
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group B — match results
Loading…
Group C
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group C — match results
Loading…
Group D
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group D — match results
Loading…
Group E
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group E — match results
Loading…
Group F
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group F — match results
Loading…
Group G
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group G — match results
Loading…
Group H
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group H — match results
Loading…
Group I
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group I — match results
Loading…
Group J
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group J — match results
Loading…
Group K
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group K — match results
Loading…
Group L
#Team MPW DL GFGA GD YCRC Pts
Loading…
Group L — match results
Loading…
Live Knowledge Graph queries

SPARQL Queries

The bracket is powered by several live queries: a bracket data query fetches all M73–M104 match info; a group standings query supplies tooltip context and contender resolution; a disciplinary query totals yellow/red cards (team conduct score); and a FIFA World Ranking query against urn:fifa:powerrankings supplies the final tie-breaker. Group order is resolved client-side using the official FIFA tie-breaking criteria (head-to-head → overall GD/GF → conduct → World Ranking).

Bracket data — all knockout matches (M73–M104)
Fetches dates, placeholder slots, resolved teams and scores for every knockout match
SPARQL · Bracket data query
PREFIX fifa: 
PREFIX rdfs: 
SELECT ?matchNumber ?m ?date ?placeHolderA ?placeHolderB
       ?homeTeam ?homeName ?awayTeam ?awayName
       ?homeScore ?awayScore ?winnerName ?matchStatus ?stadium ?stadiumName
WHERE {
  GRAPH  {
    ?m a fifa:Match ; fifa:matchNumber ?matchNumber .
    VALUES ?matchNumber { 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 }
    OPTIONAL { ?m fifa:date ?date }
    OPTIONAL { ?m fifa:placeHolderA ?placeHolderA }
    OPTIONAL { ?m fifa:placeHolderB ?placeHolderB }
    OPTIONAL { ?m fifa:homeTeam ?homeTeam . ?homeTeam rdfs:label ?homeName }
    OPTIONAL { ?m fifa:awayTeam ?awayTeam . ?awayTeam rdfs:label ?awayName }
    OPTIONAL { ?m fifa:homeTeamScore ?homeScore }
    OPTIONAL { ?m fifa:awayTeamScore ?awayScore }
    OPTIONAL { ?m fifa:winner ?w . ?w rdfs:label ?winnerName }
    OPTIONAL { ?m fifa:matchStatus ?matchStatus }
    OPTIONAL { ?m fifa:stadium ?stadium . ?stadium rdfs:label ?stadiumName }
  }
}
ORDER BY ?matchNumber
▶ Run live query
Disciplinary conduct — step-two tie-breaker
Yellow (1 pt), second yellow+red (3 pts), straight red (3 pts) per team across all group matches — lower is better
SPARQL · Disciplinary cards query
PREFIX fifa: <https://www.openlinksw.com/ontology/fifa#>
SELECT ?teamIRI
  (SUM(?yc) AS ?yellowCards)
  (SUM(?sy) AS ?secondYellowRed)
  (SUM(?dr) AS ?directRed)
  ((SUM(?sy)+SUM(?dr)) AS ?redCards)
WHERE {
  GRAPH <urn:worldcup:kg:2026> {
    ?m a fifa:Match ; fifa:group ?g .
    ?m fifa:hasBooking ?bk .
    ?bk fifa:team ?teamIRI .
    ?bk fifa:bookingCard ?cardType .
    BIND(IF(?cardType = fifa:CardType-1, 1, 0) AS ?yc)
    BIND(IF(?cardType = fifa:CardType-2, 1, 0) AS ?sy)
    BIND(IF(?cardType = fifa:CardType-3, 1, 0) AS ?dr)
  }
}
GROUP BY ?teamIRI
▶ Run live query
FIFA/Coca-Cola World Ranking — step-three tie-breaker
Latest ranking snapshot per team from urn:fifa:powerrankings (temporal graph), used when teams remain level after head-to-head and overall GD/GF/conduct
SPARQL · FIFA World Ranking query
PREFIX fifa: 
SELECT ?team ?rank
WHERE {
  GRAPH  {
    ?pr a fifa:PowerRanking ; fifa:hasTeam ?team ;
        fifa:rank ?rank ; fifa:generatedAt ?gen .
    FILTER NOT EXISTS {
      ?pr2 a fifa:PowerRanking ; fifa:hasTeam ?team ;
           fifa:generatedAt ?gen2 .
      FILTER(?gen2 > ?gen)
    }
  }
}
ORDER BY ?rank
▶ Run live query
“This World Cup Only” Elo rating — true iterative, self-contained
The live metric is a true iterative self-contained Elo: all 48 teams seed at 1000, then matches are replayed in chronological order and both ratings update after each game, so the expected term We = 1/(1+10(Ropp−Rteam)/600) reads each opponent's current rating — opponent strength emerges purely from this tournament. FIFA SUM weights (I=50 to QF, I=60 from QF; W=1/0.5/0, PSO 0.75/0.5; knockout losses protected). Because the result of one match feeds the next, the fold is order-dependent and runs in JS (it is not expressible as one CONSTRUCT).

The CONSTRUCT below is a single-pass approximation kept for SPIN reference only: with We pinned at 0.5 it reduces to a round-weighted (wins−losses) tally and omits the opponent adjustment — useful as a materialized snapshot, not equivalent to the iterative rating.
SPARQL · single-pass approximation (SPIN snapshot — not the live metric)
PREFIX fifa: 
PREFIX xsd:  
CONSTRUCT { ?team fifa:thisWorldCupEloPoints ?wcPts . }
WHERE {
  SELECT ?team (xsd:decimal(1000.0 + SUM(?delta)) AS ?wcPts)
  WHERE {
    GRAPH  {
      { ?m a fifa:Match ; fifa:matchNumber ?mn ; fifa:homeTeam ?team ; fifa:awayTeam ?opp ;
           fifa:homeTeamScore ?gf ; fifa:awayTeamScore ?ga . }
      UNION
      { ?m a fifa:Match ; fifa:matchNumber ?mn ; fifa:awayTeam ?team ; fifa:homeTeam ?opp ;
           fifa:awayTeamScore ?gf ; fifa:homeTeamScore ?ga . }
      OPTIONAL { ?m fifa:resultType ?rt }
      OPTIONAL { ?m fifa:winner ?win }
    }
    BIND( IF(?mn <= 96, 50, 60) AS ?I )                                  # WC importance weight
    BIND( IF(?gf > ?ga, 1.0, IF(?gf = ?ga, 0.5, 0.0)) AS ?Wbase )       # win/draw/loss
    BIND( IF(BOUND(?rt) && ?rt = 3, IF(?team = ?win, 0.75, 0.5), ?Wbase) AS ?W )  # PSO
    # We = 0.5 always (equal seeding), so skip Elo logistic entirely
    BIND( ?I * (?W - 0.5) AS ?raw )
    BIND( IF(?mn >= 73 && ?raw < 0.0, 0.0, ?raw) AS ?delta )             # protect KO losses
  }
  GROUP BY ?team
}
▶ Run live query