Nantes's attacking and defensive expected goals in Ligue 1 2025/2026, compared with the results they produced and with the rest of the competition.
Nantes xG and xGA per match
Every match ↓| Rank | Club | xG per match |
|---|---|---|
| #1 | Paris Saint-Germain | 2.05 |
| #2 | RC Lens | 1.98 |
| #3 | Olympique de Marseille | 1.79 |
| #4 | AS Monaco | 1.67 |
| #5 | Lille | 1.61 |
| #6 | Stade Rennais | 1.60 |
| #7 | RC Strasbourg | 1.55 |
| #8 | Olympique Lyonnais | 1.51 |
| #9 | Lorient | 1.34 |
| #10 | Paris FC | 1.33 |
| #11 | Stade Brestois | 1.32 |
| #12 | Toulouse | 1.30 |
| #13 | Nice | 1.28 |
| #14 | Le Havre | 1.12 |
| #15 | Nantes | 1.09 |
| #16 | Auxerre | 1.04 |
| #17 | Metz | 1.02 |
| #18 | Angers | 0.95 |
- League avg
- 1.42
- Total
- 35.93 33 matches
| Rank | Club | xGA per match |
|---|---|---|
| #1 | Paris Saint-Germain | 0.93 |
| #2 | Lille | 1.08 |
| #3 | RC Lens | 1.28 |
| #4 | Olympique Lyonnais | 1.29 |
| #5 | Toulouse | 1.29 |
| #6 | RC Strasbourg | 1.34 |
| #7 | Lorient | 1.35 |
| #8 | Olympique de Marseille | 1.36 |
| #9 | Auxerre | 1.41 |
| #10 | Nantes | 1.43 |
| #11 | AS Monaco | 1.43 |
| #12 | Stade Brestois | 1.47 |
| #13 | Le Havre | 1.52 |
| #14 | Stade Rennais | 1.57 |
| #15 | Paris FC | 1.63 |
| #16 | Angers | 1.64 |
| #17 | Nice | 1.71 |
| #18 | Metz | 1.84 |
- League avg
- 1.42
- Total
- 47.20 33 matches
| Rank | Club | xGD per match |
|---|---|---|
| #1 | Paris Saint-Germain | +1.12 |
| #2 | RC Lens | +0.71 |
| #3 | Lille | +0.53 |
| #4 | Olympique de Marseille | +0.43 |
| #5 | AS Monaco | +0.24 |
| #6 | Olympique Lyonnais | +0.22 |
| #7 | RC Strasbourg | +0.21 |
| #8 | Stade Rennais | +0.03 |
| #9 | Toulouse | +0.00 |
| #10 | Lorient | -0.01 |
| #11 | Stade Brestois | -0.16 |
| #12 | Paris FC | -0.30 |
| #13 | Nantes | -0.34 |
| #14 | Auxerre | -0.37 |
| #15 | Le Havre | -0.40 |
| #16 | Nice | -0.43 |
| #17 | Angers | -0.69 |
| #18 | Metz | -0.82 |
- League avg
- 0.00
- Total
- -11.27 33 matches
| Rank | Club | xPts per match |
|---|---|---|
| #1 | Paris Saint-Germain | 2.10 |
| #2 | RC Lens | 1.81 |
| #3 | Lille | 1.72 |
| #4 | Olympique de Marseille | 1.66 |
| #5 | Olympique Lyonnais | 1.53 |
| #6 | AS Monaco | 1.51 |
| #7 | RC Strasbourg | 1.47 |
| #8 | Stade Rennais | 1.42 |
| #9 | Toulouse | 1.39 |
| #10 | Lorient | 1.35 |
| #11 | Stade Brestois | 1.32 |
| #12 | Paris FC | 1.21 |
| #13 | Le Havre | 1.16 |
| #14 | Auxerre | 1.13 |
| #15 | Nice | 1.13 |
| #16 | Nantes | 1.12 |
| #17 | Angers | 0.93 |
| #18 | Metz | 0.89 |
- League avg
- 1.38
- Total
- 36.91 vs 23 actual pts
What the xG says
Nantes's underlying numbers are among the weakest in Ligue 1. They rank #13 for xG difference at -0.34 per match, from about average shot volume at low chance quality. Their 29 goals are 6.93 below 35.93 xG, while 23 points are 13.91 below 36.91 xPts.
Actual vs expected
Select a row to chart it across the season.
Goals minus xG, match by match
Nantes are 6.93 goals below their xG after 33 matches.
- Goals
- 29
- xG
- 35.93
- Gap
- -6.93
- This match
- Match gap
- Running gap
| Date | Opponent | Goals | xG | Match gap | Running gap |
|---|---|---|---|---|---|
| Sun 17/08 | Paris Saint-Germain | 0 | 0.14 | -0.14 | -0.14 |
| Sun 24/08 | RC Strasbourg | 0 | 0.44 | -0.44 | -0.58 |
| Sat 30/08 | Auxerre | 1 | 0.48 | +0.52 | -0.06 |
| Sat 13/09 | Nice | 0 | 0.75 | -0.75 | -0.81 |
| Sat 20/09 | Stade Rennais | 2 | 2.11 | -0.11 | -0.92 |
| Sat 27/09 | Toulouse | 2 | 1.46 | +0.54 | -0.38 |
| Sat 04/10 | Stade Brestois | 0 | 0.15 | -0.15 | -0.53 |
| Sun 19/10 | Lille | 0 | 0.45 | -0.45 | -0.98 |
| Fri 24/10 | Paris FC | 2 | 0.90 | +1.10 | +0.12 |
| Wed 29/10 | AS Monaco | 3 | 1.62 | +1.38 | +1.50 |
| Sun 02/11 | Metz | 0 | 0.81 | -0.81 | +0.69 |
| Sat 08/11 | Le Havre | 1 | 0.21 | +0.79 | +1.48 |
| Sun 23/11 | Lorient | 1 | 0.84 | +0.16 | +1.64 |
| Sun 30/11 | Olympique Lyonnais | 0 | 0.86 | -0.86 | +0.78 |
| Sat 06/12 | RC Lens | 1 | 1.19 | -0.19 | +0.59 |
| Fri 12/12 | Angers | 1 | 0.35 | +0.65 | +1.24 |
| Sun 04/01 | Olympique de Marseille | 2 | 3.63 | -1.63 | -0.39 |
| Sun 18/01 | Paris FC | 1 | 0.36 | +0.64 | +0.25 |
| Sun 25/01 | Nice | 1 | 1.59 | -0.59 | -0.34 |
| Sat 31/01 | Lorient | 1 | 1.05 | -0.05 | -0.39 |
| Sat 07/02 | Olympique Lyonnais | 0 | 0.73 | -0.73 | -1.12 |
| Fri 13/02 | AS Monaco | 1 | 0.93 | +0.07 | -1.05 |
| Sun 22/02 | Le Havre | 2 | 1.32 | +0.68 | -0.37 |
| Sun 01/03 | Lille | 0 | 0.21 | -0.21 | -0.58 |
| Sat 07/03 | Angers | 0 | 0.84 | -0.84 | -1.42 |
| Sun 22/03 | RC Strasbourg | 2 | 1.67 | +0.33 | -1.09 |
| Sun 05/04 | Metz | 0 | 0.46 | -0.46 | -1.55 |
| Sat 11/04 | Auxerre | 0 | 1.73 | -1.73 | -3.28 |
| Sun 19/04 | Stade Brestois | 1 | 0.92 | +0.08 | -3.20 |
| Wed 22/04 | Paris Saint-Germain | 0 | 0.89 | -0.89 | -4.09 |
| Sun 26/04 | Stade Rennais | 1 | 2.17 | -1.17 | -5.26 |
| Sat 02/05 | Olympique de Marseille | 3 | 3.42 | -0.42 | -5.68 |
| Fri 08/05 | RC Lens | 0 | 1.25 | -1.25 | -6.93 |
Nantes xG trend
Current form +0.70 npxGD per match
The last 6 matches with xG.
Out-created the opponent in 11 of 33 matches. The worst was against AS Monaco on Wed 29/10 (-2.76).
- npxG · last 6
- 1.60
- npxGA · last 6
- 0.90
- npxG
- npxGA
- npxGD
- Avg so far
| Date | Opponent | npxG | npxGA | npxGD | Avg so far |
|---|---|---|---|---|---|
| Sun 17/08 | Paris Saint-Germain | 0.14 | 1.43 | -1.29 | -1.29 |
| Sun 24/08 | RC Strasbourg | 0.44 | 1.78 | -1.34 | -1.32 |
| Sat 30/08 | Auxerre | 0.48 | 0.68 | -0.20 | -0.94 |
| Sat 13/09 | Nice | 0.78 | 1.75 | -0.97 | -0.95 |
| Sat 20/09 | Stade Rennais | 1.32 | 0.59 | +0.73 | -0.61 |
| Sat 27/09 | Toulouse | 1.31 | 1.36 | -0.05 | -0.52 |
| Sat 04/10 | Stade Brestois | 0.18 | 1.51 | -1.33 | -0.64 |
| Sun 19/10 | Lille | 0.59 | 2.60 | -2.01 | -0.81 |
| Fri 24/10 | Paris FC | 0.90 | 1.19 | -0.29 | -0.75 |
| Wed 29/10 | AS Monaco | 1.66 | 4.42 | -2.76 | -0.95 |
| Sun 02/11 | Metz | 0.88 | 1.34 | -0.46 | -0.91 |
| Sat 08/11 | Le Havre | 0.23 | 0.94 | -0.71 | -0.89 |
| Sun 23/11 | Lorient | 0.94 | 0.32 | +0.62 | -0.77 |
| Sun 30/11 | Olympique Lyonnais | 1.03 | 2.35 | -1.32 | -0.81 |
| Sat 06/12 | RC Lens | 0.99 | 2.32 | -1.33 | -0.85 |
| Fri 12/12 | Angers | 0.39 | 1.35 | -0.96 | -0.85 |
| Sun 04/01 | Olympique de Marseille | 2.06 | 0.75 | +1.31 | -0.73 |
| Sun 18/01 | Paris FC | 0.36 | 0.97 | -0.61 | -0.72 |
| Sun 25/01 | Nice | 1.58 | 0.87 | +0.71 | -0.65 |
| Sat 31/01 | Lorient | 1.05 | 0.55 | +0.50 | -0.59 |
| Sat 07/02 | Olympique Lyonnais | 0.73 | 1.21 | -0.48 | -0.58 |
| Fri 13/02 | AS Monaco | 0.92 | 1.64 | -0.72 | -0.59 |
| Sun 22/02 | Le Havre | 0.53 | 0.57 | -0.04 | -0.57 |
| Sun 01/03 | Lille | 0.21 | 0.51 | -0.30 | -0.55 |
| Sat 07/03 | Angers | 0.84 | 0.66 | +0.18 | -0.52 |
| Sun 22/03 | RC Strasbourg | 1.66 | 2.23 | -0.57 | -0.53 |
| Sun 05/04 | Metz | 0.48 | 2.51 | -2.03 | -0.58 |
| Sat 11/04 | Auxerre | 1.44 | 0.65 | +0.79 | -0.53 |
| Sun 19/04 | Stade Brestois | 0.91 | 0.36 | +0.55 | -0.50 |
| Wed 22/04 | Paris Saint-Germain | 0.87 | 1.36 | -0.49 | -0.50 |
| Sun 26/04 | Stade Rennais | 2.23 | 0.51 | +1.72 | -0.42 |
| Sat 02/05 | Olympique de Marseille | 3.02 | 1.72 | +1.30 | -0.37 |
| Fri 08/05 | RC Lens | 1.11 | 0.77 | +0.34 | -0.35 |
Each bar is one match's non-penalty xG minus the non-penalty xG against; the line is that difference averaged over the season up to each match, and it finishes on the dashed season average — 0.98 npxG and 1.33 npxGA per match. Current form is the same difference over the last 6 matches with xG.
Strength of schedule
- Season so far
- tied number 13 hardest of 18 in Ligue 1
- −0.01 xG vs league average
- Over 33 league matches
- Last 5
- number 1 hardest of 17 in Ligue 1
- +0.31 xG vs league average
- Over 5 league matches
Opponents behind the figures
Season so far
−0.01 xG vs league average · over 33 matches · tied number 13 hardest of 18
- RC Lens Away +0.74
- Olympique de Marseille Home +0.26
- Stade Rennais Away +0.11
- Paris Saint-Germain Away +0.69
- Stade Brestois Home −0.27
- Auxerre Away −0.18
- Metz Away −0.49
- RC Strasbourg Home −0.20
- Angers Home −0.48
- Lille Away +0.32
- Le Havre Home −0.32
- AS Monaco Away +0.04
- Olympique Lyonnais Home +0.02
- Lorient Away −0.09
- Nice Home −0.17
- Paris FC Home −0.09
- Olympique de Marseille Away +0.26
- Angers Away −0.48
- RC Lens Home +0.74
- Olympique Lyonnais Away +0.02
- Lorient Home −0.09
- Le Havre Away −0.32
- Metz Home −0.49
- AS Monaco Home +0.04
- Paris FC Away −0.09
- Lille Home +0.32
- Stade Brestois Away −0.27
- Toulouse Away −0.02
- Stade Rennais Home +0.11
- Nice Away −0.17
- Auxerre Home −0.18
- RC Strasbourg Away −0.20
- Paris Saint-Germain Home +0.69
Last 5
+0.31 xG vs league average · over 5 matches · number 1 hardest of 17
- RC Lens Away +0.74
- Olympique de Marseille Home +0.26
- Stade Rennais Away +0.11
- Paris Saint-Germain Away +0.69
- Stade Brestois Home −0.27
Nantes shots and chance quality
Average volume, low quality. Nantes take 11.3 shots a match (league 12.4) at 0.09 npxG a shot (league 0.10), #11 in Ligue 1 for volume and #16 for quality. 65% of their shots come from inside the box (league 66%), and set pieces produce 33% of their npxG (league 22%).
Attack
| Rank | Club | shots per match |
|---|---|---|
| #1 | Paris Saint-Germain | 17.7 |
| #2 | RC Lens | 16.5 |
| #3 | Olympique de Marseille | 15.1 |
| #4 | Stade Rennais | 14.2 |
| #5 | Lille | 13.6 |
| #6 | Toulouse | 12.8 |
| #7 | AS Monaco | 12.5 |
| #8 | Olympique Lyonnais | 12.2 |
| #9 | Paris FC | 11.7 |
| #10 | RC Strasbourg | 11.4 |
| #11 | Nantes | 11.3 |
| #12 | Lorient | 11.3 |
| #13 | Nice | 11.2 |
| #14 | Stade Brestois | 11.2 |
| #15 | Le Havre | 10.9 |
| #16 | Auxerre | 10.7 |
| #17 | Metz | 10.1 |
| #18 | Angers | 9.3 |
- League avg
- 12.4
- Total
- 374 shots from 33 matches
| Rank | Club | npxG per shot |
|---|---|---|
| #1 | AS Monaco | 0.13 |
| #2 | RC Strasbourg | 0.12 |
| #3 | RC Lens | 0.11 |
| #4 | Olympique Lyonnais | 0.11 |
| #5 | Olympique de Marseille | 0.11 |
| #6 | Lorient | 0.11 |
| #7 | Nice | 0.10 |
| #8 | Paris FC | 0.10 |
| #9 | Lille | 0.10 |
| #10 | Paris Saint-Germain | 0.10 |
| #11 | Stade Rennais | 0.10 |
| #12 | Stade Brestois | 0.10 |
| #13 | Le Havre | 0.10 |
| #14 | Toulouse | 0.09 |
| #15 | Auxerre | 0.09 |
| #16 | Nantes | 0.09 |
| #17 | Metz | 0.08 |
| #18 | Angers | 0.08 |
- League avg
- 0.10
- Total
- 32.26 npxG from 374 shots
Defence
| Rank | Club | shots per match |
|---|---|---|
| #1 | Paris Saint-Germain | 8.8 |
| #2 | Lille | 9.1 |
| #3 | Olympique de Marseille | 10.6 |
| #4 | Lorient | 11.1 |
| #5 | RC Lens | 11.1 |
| =6 | Auxerre | 12.0 |
| =6 | Olympique Lyonnais | 12.0 |
| #8 | Toulouse | 12.2 |
| #9 | Paris FC | 12.4 |
| #10 | RC Strasbourg | 12.6 |
| #11 | Le Havre | 13.0 |
| #12 | AS Monaco | 13.4 |
| #13 | Nantes | 13.5 |
| #14 | Stade Rennais | 13.5 |
| #15 | Stade Brestois | 13.9 |
| #16 | Angers | 14.4 |
| #17 | Nice | 15.0 |
| #18 | Metz | 15.3 |
- League avg
- 12.4
- Total
- 445 shots allowed from 33 matches
| Rank | Club | npxGA per shot |
|---|---|---|
| #1 | RC Strasbourg | 0.09 |
| #2 | Paris Saint-Germain | 0.09 |
| #3 | Toulouse | 0.10 |
| #4 | Stade Brestois | 0.10 |
| #5 | Olympique Lyonnais | 0.10 |
| #6 | Nantes | 0.10 |
| #7 | Nice | 0.10 |
| #8 | AS Monaco | 0.10 |
| #9 | RC Lens | 0.10 |
| #10 | Angers | 0.10 |
| #11 | Stade Rennais | 0.10 |
| #12 | Le Havre | 0.10 |
| #13 | Metz | 0.11 |
| #14 | Auxerre | 0.11 |
| #15 | Lorient | 0.11 |
| #16 | Paris FC | 0.11 |
| #17 | Lille | 0.11 |
| #18 | Olympique de Marseille | 0.12 |
- League avg
- 0.10
- Total
- 43.77 npxGA from 445 shots
Shot profile
65% inside the box
League avg 66%
From 242 of 374 shots over 33 matches
69% allowed inside the box
League avg 66%
From 309 of 445 shots allowed over 33 matches
67% open play · 33% set pieces
League avg 22% set pieces
From 10.8 of 32.8 npxG over 33 matches
79% open play · 21% set pieces
League avg 22% set pieces
From 9.1 of 44.1 npxG allowed over 33 matches
Nantes home and away xG
| Measure | Home | Away |
|---|---|---|
| Matches | 16 | 17 |
| xG / match | 1.16 | 1.03 |
| xGA / match | 1.41 | 1.45 |
| xGD / match | -0.25 | -0.42 |
| xPts / match Model — Model output — computed from each match's xG, not a result. How xPts works → | 1.22 | 1.02 |
Every figure divides by that half's matches with xG. A half with fewer than 3 matches with xG is muted.
Every Nantes match by xG
This season
- Matches
- 33
- xG / match
- 1.09
- xGA / match
- 1.43
- xGD / match
- -0.34
- Points
- 23 of 99
- Fri 08/05 RC Lens A xG 1.25 xGA 0.82 xGD +0.43 xPts 1.72
- Sat 02/05 Olympique de Marseille H xG 3.42 xGA 1.36 xGD +2.06 xPts 2.55
- Sun 26/04 Stade Rennais A xG 2.17 xGA 1.30 P xGD +0.87 xPts 1.99
- Wed 22/04 Paris Saint-Germain A xG 0.89 xGA 2.17 P xGD -1.28 xPts 0.51
- Sun 19/04 Stade Brestois H xG 0.92 xGA 0.42 xGD +0.50 xPts 1.82
- Sat 11/04 Auxerre A xG 1.73 xGA 0.66 xGD +1.07 xPts 2.24
- Sun 05/04 Metz A xG 0.46 xGA 2.31 xGD -1.85 xPts 0.21
- Sun 22/03 RC Strasbourg H xG 1.67 xGA 2.12 xGD -0.45 xPts 1.06
- Sat 07/03 Angers H xG 0.84 xGA 0.66 xGD +0.18 xPts 1.48
- Sun 01/03 Lille A xG 0.21 xGA 0.51 xGD -0.30 xPts 0.87
- Sun 22/02 Le Havre H xG 1.32 P xGA 0.58 xGD +0.74 xPts 2.02
- Fri 13/02 AS Monaco A xG 0.93 xGA 1.53 xGD -0.60 xPts 0.87
- Sat 07/02 Olympique Lyonnais H xG 0.73 xGA 1.21 xGD -0.48 xPts 0.91
- Sat 31/01 Lorient A xG 1.05 xGA 0.55 xGD +0.50 xPts 1.83
- Sun 25/01 Nice H xG 1.59 xGA 0.87 xGD +0.72 xPts 1.95
- Sun 18/01 Paris FC H xG 0.36 xGA 0.97 xGD -0.61 xPts 0.69
- Sun 04/01 Olympique de Marseille A Best underlying xG 3.63 P xGA 0.75 xGD +2.88 xPts 2.83
- Fri 12/12 Angers A xG 0.35 xGA 2.39 P xGD -2.04 xPts 0.16
- Sat 06/12 RC Lens H xG 1.19 xGA 2.30 xGD -1.11 xPts 0.64
- Sun 30/11 Olympique Lyonnais A xG 0.86 xGA 2.35 xGD -1.49 xPts 0.42
- Sun 23/11 Lorient H xG 0.84 xGA 0.32 xGD +0.52 xPts 1.86
- Sat 08/11 Le Havre A xG 0.21 xGA 0.94 xGD -0.73 xPts 0.55
- Sun 02/11 Metz H xG 0.81 xGA 1.34 xGD -0.53 xPts 0.88
- Wed 29/10 AS Monaco H Weakest underlying xG 1.62 xGA 4.31 xGD -2.69 xPts 0.24
- Fri 24/10 Paris FC A xG 0.90 xGA 1.19 xGD -0.29 xPts 1.09
- Sun 19/10 Lille H xG 0.45 xGA 2.60 xGD -2.15 xPts 0.16
- Sat 04/10 Stade Brestois A xG 0.15 xGA 1.51 xGD -1.36 xPts 0.27
- Sat 27/09 Toulouse A xG 1.46 xGA 2.15 P xGD -0.69 xPts 0.90
- Sat 20/09 Stade Rennais H xG 2.11 P xGA 1.37 P xGD +0.74 xPts 1.92
- Sat 13/09 Nice A xG 0.75 xGA 1.75 xGD -1.00 xPts 0.58
- Sat 30/08 Auxerre H xG 0.48 xGA 0.68 xGD -0.20 xPts 1.07
- Sun 24/08 RC Strasbourg A xG 0.44 xGA 1.78 xGD -1.34 xPts 0.34
- Sun 17/08 Paris Saint-Germain H xG 0.14 xGA 1.43 xGD -1.29 xPts 0.27
Newest first. The dot is xG and the ring is xGA, on one scale from 0 to 4.31. Best and weakest underlying mark the highest and lowest xGD once 5 matches have xG. Against the chances marks a win with xGD of −1.00 or lower, or a loss with +1.00 or higher. P marks a side with at least 0.50 xG from penalties.
Nantes in Ligue 1
Attack
- xG / match #15 of 18
- Shots / match #11 of 18
- Chance quality #16 of 18
- Home xG #17 of 21
- Away xG #12 of 21
Defence
- xGA / match #10 of 18
- Shots allowed #13 of 18
- Chance quality allowed #6 of 18
About the data
- xG data
- Provided by TheStatsAPI, and stored as published.
- Derived metrics
- xGD, per-match rates, rankings and rolling averages are calculated from the match data.
- Model metrics
- xPts is produced by our probability model.