2026-07-02-seo-audit.md
countries/tn/reports/2026-07-02-seo-audit.md
SEO Audit — tunisie-electricite.com — 2026-07-02
First run — no prior report exists, so this is the baseline. Future runs should diff against this file and re-verify only pages that scored <8/10 or changed since (git log).
1. Live site health
All checked URLs returned 200 OK, response times 0.1–1.0s (no anomalies):
| URL | Status | Time |
|---|---|---|
/ |
200 | 0.22s |
/tarifs |
200 | 0.87s |
/tarifs-gaz |
200 | 0.89s |
/steg |
200 | 0.86s |
/coupures |
200 | 0.83s |
/annuaire |
200 | 0.78s |
/sitemap.xml |
200 | 0.18s |
/robots.txt |
200 | 0.12s |
/steg/coupures, /facture, /numero-vert, /raccordement-gaz, /raccordement, /service-client, /solaire |
200 | 0.17–0.97s |
/mentions-legales |
200 | 0.87s |
No critical availability issues.
2. Page audits (scored /100 per the monorepo SEO checklist)
| Page | Score | Rating | Key issue |
|---|---|---|---|
/tarifs |
89 | Good | Meta desc 172 chars (12 over) |
/coupures |
87 | Good | Meta desc 224 chars — worst offender site-wide |
/steg |
82 | Good | Title 85 chars (truncates in SERP); meta 193 chars |
/steg/numero-vert |
83 | Good | Meta desc 189 chars |
/tarifs-gaz |
76 | Good | No BreadcrumbList JSON-LD (only sibling /tarifs has it) |
/steg/service-client |
75 | Good | Thin body internal linking |
/steg/facture |
74 | Good | Meta desc 201 chars |
/mentions-legales |
72 | Acceptable | Low priority (legal boilerplate page) |
/steg/raccordement |
71 | Needs work | Meta desc 197 chars |
/steg/raccordement-gaz |
70 | Needs work | Meta desc 184 chars; only 1 body link |
/ (homepage) |
65 | Needs work | No links to /tarifs, /tarifs-gaz, /coupures, /steg in body; no schema at all |
/steg/solaire |
65 | Needs work | Zero body-content internal links |
/steg/coupures |
58 | Needs work | Zero body-content internal links; title 87 chars; overlaps /coupures (cannibalization risk) |
Directory templates (annuaire/_index, _gouvernorat, _delegation — 1 + 24 + 261 = 286 generated pages): titles and meta descriptions are dynamic and unique per page (good programmatic SEO hygiene), but none carry BreadcrumbList JSON-LD — only the visual breadcrumb nav. Given the page count, this is the single highest-leverage structured-data gap on the site. Estimated ~75/100 each.
Site-wide pattern: every one of the 13 static pages has a meta description over the 160-character guideline (range: 163–224 chars), so Google truncates the crafted CTA copy on all of them in search results.
Internal links: cross-checked every static href="/..." against the real page list —
zero broken internal links found.
3. Directory spot-check
Tested 3 random delegation pages (ben-arous/bou-mhel-el-bassatine, siliana/bou-arada,
kebili/souk-el-ahad) plus their parent governorate pages — all resolve 200 with correct,
unique title/meta/H1 populated from governorates.json + steg_agencies.json.
Note for future runs: delegation pages live at /{gouvernorat}/{delegation}, not
/annuaire/{gouvernorat}/{delegation} — only the governorate list is under /annuaire/.
Top 5 actions (ranked by impact/effort)
- Trim all 13 meta descriptions to ≤160 chars. Every page exceeds it (worst:
/coupuresat 224,/steg/factureat 201,/steg/raccordementat 197,/stegat 193). High impact (CTR on every indexed page), low effort (copy edit). - Add BreadcrumbList JSON-LD to the 3 annuaire templates (
_index,_gouvernorat,_delegation), matching the pattern already used on 10/13 static pages. High impact (structured data across ~286 pages at once), low-medium effort. - Add 3-5 contextual body links to
/steg/coupuresand/steg/solaire(currently zero outside the breadcrumb) and thicken/steg/raccordement-gaz//steg/service-client. Obvious targets already exist:/coupures,/tarifs,/annuaire, sibling/steg/*pages. - Link the homepage to
/tarifs,/tarifs-gaz,/coupures,/steg. The homepage is the top-authority page on the site and currently sends zero body-content link equity to its own core sections. - Shorten the two outlier titles —
/steg(85 chars) and/steg/coupures(87 chars) — to under ~65 chars so they stop truncating in SERPs; while there, give/tarifs-gazthe same BreadcrumbList JSON-LD as its sibling/tarifsfor consistency.
Nice-to-have (not urgent): no ogImage is set on any page site-wide (social share
previews are blank); most /steg/* subpages have natural Q&A content but no
<x-accordion :schema> FAQ block (only /tarifs, /coupures, /steg/numero-vert have one).