Computed from every play, garbage time excluded. FBS rank among players with enough volume
| Defense | Value | FBS rank |
|---|---|---|
| Havoc plays | 2 | 1186th / 2575 |
| Tackles for loss | 2 | 628th / 1913 |
| Run stops | 13 | 332nd / 3263 |
| Sacks | 0 | — |
| Pass breakups | 0 | — |
| Interceptions | 0 | — |
| Forced fumbles | 0 | — |
| Tackles | 22 | — |
Where Wilson's plays went: throw and catch spots, air yards and yards after the catch, read from the play-by-play
The play-by-play names the defender on breakups, interceptions and tackles, but not the man in coverage on every throw, so true times-targeted isn't in the text. Coverage plays is the closest stand-in; exact targets come from hand charting.
Keenan Wilson's box score, game by game, from ESPN, with a 0–10 game score for each (hover it for how it works). Click a result for the full game
FBS rank among qualifying players
| Defense | 2026 | FBS rank |
|---|---|---|
| Tackles | 22 | 821st / 5410 |
| Solo | 10 | — |
| Tackles for loss | 1.5 | 1056th / 2452 |
| Sacks | 0 | — |
| QB hurries | 2 | 302nd / 1382 |
| Passes defended | 0 | — |
| Defensive TD | 0 | — |
| Kick returns | 2026 | FBS rank |
|---|---|---|
| Returns | 1 | — |
| Yards | 17 | — |
| Average | 17 | — |
| Touchdowns | 0 | — |
| Long | 17 | — |
Estimated snaps from a model trained on real NFL snap counts. Ranges in brackets are where the real number lands 80% of the time: wide for a single game, tighter over the season. How it works
| Game | Start | Opp. plays | Est. snaps | Plays made | Special teams | Penalties | Snap share |
|---|---|---|---|---|---|---|---|
| Wk 1 · Jacksonville State | ✓ DT | 54 | ~15 (6–24) | 1 | · | 1 | 28% |
| Wk 1 · Fordham | ✓ DT | 48 | ~12 (6–18) | 1 | · | · | 25% |
| Wk 2 · Air Force | ✓ DT | 66 | ~41 (20–52) | 5 | · | · | 62% |
| Wk 3 · Sacramento State | ✓ DT | 66 | ~37 (14–58) | 3 | · | · | 56% |
| Wk 5 · Wyoming | ✓ DT | 49 | ~17 (7–27) | 1 | · | 1 | 35% |
| Wk 6 · UNLV | ✓ DT | 63 | ~38 (15–60) | 6 | · | · | 60% |
| Wk 7 · Nevada | — | 57 | ~40 (20–50) | 5 | 1 | · | 70% |
| Season | 6 GS | 403 | 200 (128–257) | 22 | 1 | 2 | 50% |
19 DLs on the North Dakota State roster, ordered by tkl
| # | Player | Pos | Class | Tkl | TFL | Sacks | INT | PD |
|---|---|---|---|---|---|---|---|---|
| Keenan Wilson | DT | 22 | 1.5 | 0 | — | 0 | ||
| 94 | Logan Larson | DT | SR | 21 | 2 | 0.5 | — | 1 |
| 11 | Matthew Stenbroten | DE | SO | 20 | 3 | 1 | — | 0 |
| 9 | Kelton McCaslin | DE | SR | 16 | 7 | 5 | — | 1 |
| Zach Vanderpool | DT | 8 | 0 | 0 | — | 1 | ||
| 93 | Anthony Okes | DE | JR | 5 | 0 | 0 | — | 0 |
| 99 | Obald Niyonkuru | DT | JR | 4 | 0 | 0 | — | 0 |
| Alijah Wayne | DT | 4 | 0 | 0 | — | 0 | ||
| 0 | Victor Isele | DE | JR | 2 | 1.5 | 0.5 | — | 0 |
| 48 | Blake Schiltz | DE | FR | 2 | 1 | 1 | — | 0 |
| 56 | Allante Burley | DE | SR | 2 | 0 | 0 | — | 0 |
| 60 | Thomas Roberts | DT | FR | 2 | 0 | 0 | — | 0 |
| 53 | Chase Evink | DT | FR | 1 | 0 | 0 | — | 0 |
| 58 | Zach Hellendrung | DT | FR | — | — | — | — | — |
| 64 | Jason Hunter | DT | FR | — | — | — | — | — |
| 65 | Brody Clubb | DT | FR | — | — | — | — | — |
| 90 | Truman Griffith | DE | SO | — | — | — | — | — |
| 92 | Daniel Devine | DE | FR | — | — | — | — | — |
| 98 | Jack Hansen | DT | SO | — | — | — | — | — |
Stats, EPA and usage come from CollegeFootballData.com and refresh daily. FBS ranks only count players with enough volume for the stat to mean something. Qualifying for EPA takes —+ plays per team game. North Dakota State depth chart →