xJawn NHL expected goals

← Blog

Where does Trevor Zegras belong? Part 1: where he actually played

Before you can ask whether he's better at centre, you have to know which nights he played there. The data didn't say — so we built it, game by game, and we're publishing every row.

Trevor Zegras has spent his career being moved between centre and the wing, and the argument about where he belongs is the kind of thing hockey people have strong opinions about and thin evidence for. We want to settle it properly. But there is a step before that one, and it turned out to be the whole job: to ask whether he is better at centre, you first have to know which nights he played there — and no data source we had could tell us.

This is Part 1. It is entirely about building that answer. No performance numbers, no verdict on where he belongs. Just: where did he actually line up, on each of the 91 games he dressed for in 2025-26, and how confident are we? Every row is published below so you can check our work.

The label is useless

The obvious place to look is the position code the NHL publishes with each game's roster. It is genuinely a per-game field. It is also, for this purpose, worthless: Zegras reads C in all 179 games we have cached across three seasons — including entire stretches nobody disputes he spent on the wing. It is his registered position, not his deployment. Season-long bio files say the same thing even more coarsely: one letter for all 82 games.

So the position of a forward on a given night is simply not recorded anywhere in the feeds. We had to measure it, twice, from two independent directions.

Measurement one: what the team said

Before every game, NHL.com publishes a projected lineup. The forward lines print in slot order — left wing, centre, right wing — with no position labels at all:

Denver Barkey -- Trevor Zegras -- Owen Tippett

Being in the middle is the entire signal. We fetch each game's preview page, pull the lineup out of the structured data embedded in it, and read the slot by position in the row. Names are matched back to player ids within that game's dressed roster, which is what makes a bare "Sean Couturier" unambiguous — there are only about twenty skaters in scope.

Two things about that process are worth stating plainly, because they are the sort of thing that quietly corrupts a dataset. First, the source has real errors: it spells Garnet Hathaway "Garnett" some nights, and it carries invisible characters that make identical names compare unequal. Second, and more instructive — while we were building this, an automated summariser twice told us Zegras was at centre on 7 March when the underlying text plainly listed him on the left wing. So no summary of the page is trusted anywhere in the pipeline. The slot is computed from the printed order in code, and every row in the table below stores the literal line it came from, so you can check the label against the source string yourself.

Our first pass found lineups for 82 of the Flyers' 92 games, and we were ready to call the other ten unavailable. They weren't. All ten were our own bugs, and they are worth naming because each one failed silently:

  • The heading is written three different ways. Most pages say "**Flyers projected lineup**"; some reverse it to "Projected Flyers lineup"; the playoff articles use a markdown heading instead of bold, sometimes glued onto the end of the previous sentence. Each unmatched spelling quietly cost whole games.
  • Some headings trail invisible junk, and our reader stopped at the first line it couldn't understand — which was that junk, sitting between the heading and the names.
  • Montréal. Our team list spells it with the accent; the site's web address does not. The three missing Montreal games were a single unstripped é — and the failure was invisible because a wrong address on that site doesn't return an error, it returns the homepage, at a perfectly healthy HTTP 200. We had cached the homepage three times and recorded it as "no lineup published".

That last one is the dangerous class of bug, so it now has a guard: a fetched page is only saved if it actually contains a lineup. Otherwise "we already have that game" is a lie that survives forever.

And one more, found only because a mangled name was visible in the table below: the pages are UTF-8 but never say so, and the web standard says that when a server doesn't say, you should assume a much older character set. Follow the standard and every accent and non-breaking space in the file quietly corrupts — "Tyson Foerster" arrives as "Tyson Foerster". Names still mostly matched, so nothing looked broken; it just silently cost us seven players. Now we trust a declared character set and detect it when none is declared.

Fixed, coverage is all 92 games, and 97.5% of the names in them resolve to a player who actually dressed. The remaining 2.5% are not bugs either — they are players who were projected and then scratched, and we deliberately leave them unresolved rather than guess.

Measurement two: what actually happened

A projected lineup is intent, published before puck drop. Lines get shuffled. So the second measurement is behavioural and comes from the play-by-play: what share of his team's faceoffs did he take? Centres take draws; wingers mostly don't. We use share rather than a raw count because raw counts confound with ice time.

Checked against the 91 games where the team told us the answer, a cut at 10% of team draws agrees 91.2% of the time (it catches 94.3% of the stated-centre games, and correctly clears 89.3% of the stated-wing ones). The accuracy surface is flat either side of that, so nothing hinges on the exact number.

Zegras faceoff share by game across 2025-26, with games where he was listed at
            centre pre-game shaded, showing a sustained block of high share late in the season.
Every game of 2025-26 in order. Dots are the share of the Flyers' faceoffs Zegras took; shaded columns are games where he was listed at centre before puck drop. The two measurements mostly move together — and the late-season block where they lock in is the real story of his year.

What we concluded

Where both measurements agree, we call it confirmed — 83 of the 91 games he dressed for. Where they disagree (8 games), we go with what he actually did rather than what was planned — but we flag the row, because those are genuinely contestable and they are not randomly scattered.

Across the season: 39 games at centre, 52 on the wing. The shape of it:

  • Opening night at centre, then straight to the wing — where he stayed, with isolated one-off exceptions, from mid-October through late January.
  • A first real move to centre on 29 January, holding through to the Olympic break.
  • A reversion to the wing for five games coming out of the break, 25 February through 5 March.
  • The permanent move on 7 March — from there he is a centre for the rest of the regular season and the entire playoff run, one blip aside.

That last stretch is the one people remember, and it is real. But the popular version of this story — "he moved back to centre for the last third of the season" — is off in a way that matters. The move happened in January, got reversed, and only stuck in March. Any honest attempt to compare his centre and wing performance has to use those dates, not the remembered ones.

Every game, for review

Here is the whole thing. Stated is the slot he was listed in pre-game, with the printed line beside it. Draws is his share of the Flyers' faceoffs that night. Call is what we concluded. Red rows are the 8 where the two measurements disagreed.

DateOppStatedLine as printed DrawsCallBasis
2025-10-09 @FLA C L2 Owen Tippett -- Trevor Zegras -- Travis Konecny 14 21% C confirmed
2025-10-11 @CAR C L2 Owen Tippett -- Trevor Zegras -- Christian Dvorak 7 10% C confirmed
2025-10-13 FLA C L2 Christian Dvorak -- Trevor Zegras -- Owen Tippett 4 8% W disputed
2025-10-16 WPG L L2 Trevor Zegras -- Christian Dvorak -- Owen Tippett 2 4% W confirmed
2025-10-18 MIN L L2 Trevor Zegras -- Christian Dvorak -- Owen Tippett 1 2% W confirmed
2025-10-20 SEA L L2 Trevor Zegras -- Christian Dvorak -- Matvei Michkov 3 5% W confirmed
2025-10-23 @OTT L L2 Trevor Zegras -- Christian Dvorak -- Matvei Michkov 3 7% W confirmed
2025-10-25 NYI L L2 Trevor Zegras -- Christian Dvorak -- Matvei Michkov 1 2% W confirmed
2025-10-28 PIT L L2 Trevor Zegras -- Christian Dvorak -- Matvei Michkov 4 7% W confirmed
2025-10-30 NSH L L2 Trevor Zegras -- Christian Dvorak -- Matvei Michkov 12 24% C disputed
2025-11-01 TOR C L1 Owen Tippett -- Trevor Zegras -- Matvei Michkov 14 21% C confirmed
2025-11-02 CGY L L2 Trevor Zegras -- Christian Dvorak -- Matvei Michkov 2 4% W confirmed
2025-11-04 @MTL R L1 Owen Tippett -- Christian Dvorak -- Trevor Zegras 2 3% W confirmed
2025-11-06 @NSH R L1 Owen Tippett -- Christian Dvorak -- Trevor Zegras 4 7% W confirmed
2025-11-08 OTT R L1 Owen Tippett -- Christian Dvorak -- Trevor Zegras 2 4% W confirmed
2025-11-12 EDM L L1 Trevor Zegras -- Sean Couturier -- Matvei Michkov 4 8% W confirmed
2025-11-14 @STL R L2 Owen Tippett -- Christian Dvorak -- Trevor Zegras 0 0% W confirmed
2025-11-15 @DAL R L2 Owen Tippett -- Christian Dvorak -- Trevor Zegras 1 2% W confirmed
2025-11-20 STL L L2 Trevor Zegras -- Christian Dvorak -- Owen Tippett 1 2% W confirmed
2025-11-22 NJD L L2 Trevor Zegras -- Christian Dvorak -- Owen Tippett 1 2% W confirmed
2025-11-24 @TBL L L2 Trevor Zegras -- Christian Dvorak -- Owen Tippett 0 0% W confirmed
2025-11-26 @FLA L L2 Trevor Zegras -- Christian Dvorak -- Owen Tippett 0 0% W confirmed
2025-11-28 @NYI L L2 Trevor Zegras -- Christian Dvorak -- Owen Tippett 2 4% W confirmed
2025-11-29 @NJD L L2 Trevor Zegras -- Christian Dvorak -- Owen Tippett 3 5% W confirmed
2025-12-01 PIT L L2 Trevor Zegras -- Christian Dvorak -- Owen Tippett 2 4% W confirmed
2025-12-03 BUF L L2 Trevor Zegras -- Christian Dvorak -- Travis Konecny 7 12% C disputed
2025-12-07 COL L L2 Trevor Zegras -- Christian Dvorak -- Travis Konecny 4 8% W confirmed
2025-12-09 SJS L L2 Trevor Zegras -- Christian Dvorak -- Travis Konecny 0 0% W confirmed
2025-12-11 VGK L L2 Trevor Zegras -- Christian Dvorak -- Travis Konecny 3 7% W confirmed
2025-12-13 CAR L L2 Trevor Zegras -- Christian Dvorak -- Travis Konecny 0 0% W confirmed
2025-12-14 @CAR L L2 Trevor Zegras -- Christian Dvorak -- Travis Konecny 6 9% W confirmed
2025-12-16 @MTL L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 3 5% W confirmed
2025-12-18 @BUF L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 4 7% W confirmed
2025-12-20 @NYR L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 9 15% C disputed
2025-12-22 VAN L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 2 4% W confirmed
2025-12-23 @CHI L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 2 4% W confirmed
2025-12-28 @SEA L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 3 6% W confirmed
2025-12-30 @VAN L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 1 2% W confirmed
2025-12-31 @CGY L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 2 4% W confirmed
2026-01-03 @EDM L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 1 2% W confirmed
2026-01-06 ANA L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 3 5% W confirmed
2026-01-08 TOR L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 3 6% W confirmed
2026-01-10 TBL R L1 Matvei Michkov -- Christian Dvorak -- Trevor Zegras 3 7% W confirmed
2026-01-12 TBL L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 1 2% W confirmed
2026-01-14 @BUF L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 3 5% W confirmed
2026-01-15 @PIT L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 2 4% W confirmed
2026-01-17 NYR L L2 Trevor Zegras -- Noah Cates -- Owen Tippett 8 12% C disputed
2026-01-19 @VGK L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 1 2% W confirmed
2026-01-21 @UTA L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 1 2% W confirmed
2026-01-23 @COL L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 0 0% W confirmed
2026-01-26 NYI L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 3 5% W confirmed
2026-01-28 @CBJ L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 1 2% W confirmed
2026-01-29 @BOS L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 12 23% C disputed
2026-01-31 LAK C L3 Matvei Michkov -- Trevor Zegras -- Bobby Brink 8 12% C confirmed
2026-02-03 WSH C L2 Denver Barkey -- Trevor Zegras -- Owen Tippett 8 15% C confirmed
2026-02-05 OTT C L2 Denver Barkey -- Trevor Zegras -- Owen Tippett 6 13% C confirmed
2026-02-25 @WSH L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 1 2% W confirmed
2026-02-26 @NYR L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 2 4% W confirmed
2026-02-28 BOS L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 3 5% W confirmed
2026-03-02 @TOR L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 4 7% W confirmed
2026-03-05 UTA L L1 Trevor Zegras -- Christian Dvorak -- Owen Tippett 4 8% W confirmed
2026-03-07 @PIT L L2 Trevor Zegras -- Noah Cates -- Luke Glendening 9 13% C disputed
2026-03-09 NYR C L3 Carl Grundstrom -- Trevor Zegras -- Owen Tippett 11 20% C confirmed
2026-03-11 WSH C L3 Carl Grundstrom -- Trevor Zegras -- Owen Tippett 7 12% C confirmed
2026-03-12 @MIN C L2 Carl Grundstrom -- Trevor Zegras -- Owen Tippett 13 27% C confirmed
2026-03-14 CBJ C L3 Nikita Grebenkin -- Trevor Zegras -- Owen Tippett 10 16% C confirmed
2026-03-18 @ANA C L2 Nikita Grebenkin -- Trevor Zegras -- Owen Tippett 8 16% C confirmed
2026-03-19 @LAK C L2 Nikita Grebenkin -- Trevor Zegras -- Owen Tippett 9 16% C confirmed
2026-03-21 @SJS C L2 Nikita Grebenkin -- Trevor Zegras -- Owen Tippett 7 12% C confirmed
2026-03-24 CBJ C L2 Denver Barkey -- Trevor Zegras -- Owen Tippett 9 18% C confirmed
2026-03-26 CHI C L2 Denver Barkey -- Trevor Zegras -- Owen Tippett 8 15% C confirmed
2026-03-28 @DET C L2 Denver Barkey -- Trevor Zegras -- Owen Tippett 9 15% C confirmed
2026-03-29 DAL C L2 Denver Barkey -- Trevor Zegras -- Owen Tippett 9 19% C confirmed
2026-03-31 @WSH C L2 Denver Barkey -- Trevor Zegras -- Owen Tippett 8 14% C confirmed
2026-04-02 DET C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 12 24% C confirmed
2026-04-03 @NYI C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 3 5% W disputed
2026-04-05 BOS C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 7 12% C confirmed
2026-04-07 @NJD C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 5 11% C confirmed
2026-04-09 @DET C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 9 17% C confirmed
2026-04-11 @WPG C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 10 18% C confirmed
2026-04-13 CAR C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 8 17% C confirmed
2026-04-18 @PIT C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 8 16% C confirmed
2026-04-20 @PIT C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 8 12% C confirmed
2026-04-22 PIT C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 7 13% C confirmed
2026-04-25 PIT C L1 Tyson Foerster -- Trevor Zegras -- Owen Tippett 10 18% C confirmed
2026-04-27 @PIT C L1 Denver Barkey -- Trevor Zegras -- Owen Tippett 7 12% C confirmed
2026-04-29 PIT C L1 Denver Barkey -- Trevor Zegras -- Owen Tippett 10 17% C confirmed
2026-05-02 @CAR C L1 Owen Tippett -- Trevor Zegras -- Porter Martone 9 14% C confirmed
2026-05-04 @CAR L L1 Trevor Zegras -- Christian Dvorak -- Travis Konecny 1 1% W confirmed
2026-05-07 CAR C L1 Alex Bump -- Trevor Zegras -- Porter Martone 5 10% C confirmed
2026-05-09 CAR C L1 Alex Bump -- Trevor Zegras -- Porter Martone 10 14% C confirmed

Tell us where we're wrong

We are publishing every row precisely because we expect some of them to be wrong, and because the people most likely to know are the ones who watched the games. If you were at a game, charted one, or just remember a night clearly — especially one of the 8 red rows — we would genuinely like to hear it.

That includes telling us we got it right. Confirmation is not noise here: a handful of independent "yes, he centred that night" replies on the contested games is the only external check this dataset will ever get, and it is worth more to us than another modelling pass. Either way, find us on Bluesky or X. Corrections get folded in and credited.

The contested games are not random. Several of them — 29 January especially, where he was listed on the wing and then took 23% of the Flyers' draws — look exactly like a player being promoted mid-game. If that is what happened, those nights are neither "centre" nor "wing", and forcing them into one bucket is the single biggest weakness in what we've built.

What Part 2 has to deal with

Knowing the dates is necessary, not sufficient. Three obstacles remain between this table and an actual answer, and they are worth naming now so the next post can be judged against them.

  1. The model's unit of analysis carries no roles. The on-ice model is built on stints — stretches where nobody changes. A stint is five player ids a side, unordered. Splitting one person into a "Zegras at C" column and a "Zegras at W" column is not a configuration change; that mechanism does not exist yet.
  2. Everything is 5v5 only. A centre-versus-wing argument is disproportionately a power-play argument. That bucket is missing from the value accounting entirely.
  3. Role changes are not randomly assigned. This is the big one. Coaches move players to the wing for reasons and move them back for reasons, and those reasons are correlated with how the player is going. A role split measures the coach's judgement at least as much as the player's fit. Zegras's own season is a perfect illustration: the January promotion was reversed within a month. Something drove that, and it was probably how he was playing.

So Part 2 will pre-register what would count as an answer before computing anything, which is how everything else on this site has been adjudicated — and it should be read expecting the honest verdict to be "the effect is smaller than the noise", because that has been the verdict for most things we have tested on this corpus.

But the dates are real now, and they were not before. That is the part that had to happen first.