0% 5h quota used · resets in 2h live · 08/09/2026 12:12 CEST

2026-07-27-seo-audit.md

countries/tn/reports/2026-07-27-seo-audit.md

seo-audit tn written 27/07/2026 10:09 ← previous seo-audit next seo-audit →

SEO Audit — tunisie-electricite.com — 2026-07-27

Diffed against reports/2026-07-03-seo-audit.md. git log origin/develop --since=2026-07-03 -- sites/tunisie-electricite.com departments/tunisia-energy returns nothing — none of the 13 static pages or annuaire templates changed since the last audit, so those scores carry forward unchanged (re-verified live, not just assumed). However, this run expanded scope to the /coupures/{gouvernorat} and /coupures/{gouvernorat}/{municipality} power-outage pages (feature a288f76624, merged 2026-06-29) — never audited before — and found a major, high-leverage gap. See §5.

1. Live site health

All 16 checked URLs returned 200 OK, 0.13–0.38s:

URL Status Time
/, /tarifs, /tarifs-gaz, /steg, /coupures, /annuaire, /sitemap.xml, /robots.txt 200 0.15–0.33s
/steg/coupures, /steg/facture, /steg/numero-vert, /steg/raccordement, /steg/raccordement-gaz, /steg/service-client, /steg/solaire, /mentions-legales 200 0.14–0.38s

No availability issues. robots.txt correctly allows /coupures/* and references the sitemap.

2. Page audits (13 static pages, re-verified live — scores unchanged since 07-03)

Page Score Note
/tarifs 95 title 65, meta 140
/tarifs-gaz 93 title 64, meta 159
/coupures 92 title 66, meta 156
/steg 91 title 52, meta 157
/steg/numero-vert 90 title 57, meta 148
/steg/service-client 88 title 61, meta 146
/steg/facture 87 title 56, meta 153
/steg/raccordement 86 title 56, meta 149
/steg/raccordement-gaz 84 title 76 chars (>65), unresolved 2 runs in a row
/mentions-legales 82 meta 159, low-priority legal page
/steg/solaire 82 title 71 chars (>65), unresolved 2 runs in a row
/steg/coupures 80 still no on-page schema beyond breadcrumb
/ (homepage) 76 title 56, meta 148 (both fine) — still the only static page with zero structured data

Directory templates (/annuaire/*, 1 + 24 + 261 = 286 pages): unchanged, ~85/100, BreadcrumbList confirmed present.

3. Directory spot-check

/annuaire/sfax, /tunis/carthage, /annuaire — all 200, unique title/H1, BreadcrumbList present. /tunis/carthage title correctly appends the postal code ((2016)) — verified against the template, not a bug.

4. Fix-tracking — 2 items from 07-03 report still open, unchanged

  1. Homepage has 0 structured data (no Organization/WebSite JSON-LD) — still open, 2nd run flagged.
  2. /steg/raccordement-gaz (76 chars) and /steg/solaire (71 chars) titles still over the 65-char guideline — still open, 2nd run flagged.

ogImage site-wide (0 pages) and FAQ accordions on 5 /steg/* pages — still open, 3rd run flagged, unchanged.

5. New finding — power-outage pages (/coupures/{gouvernorat}[/{municipality}])

These 374 pages (24 governorate + 350 municipality, feature merged 2026-06-29, never audited before) are directly relevant to the outage/délestage search demand flagged as opportunity #1 in the 2026-07-15 business review. They are well-built (invokable controllers — cacheable, live outage feed, BreadcrumbList + FAQPage JSON-LD, internal cross-links, og:title/og:description present) but have two systemic, template-level issues:

a) Title and meta description exceed length guidelines on 100% of pages — a single hardcoded template string in each Blade file, computed precisely ([...string].length, not byte count):

Template Pages Title length Meta length
coupures/_gouvernorat.blade.php 24 66–73 chars (guideline ≤65) 167–174 chars (guideline ≤160)
coupures/_municipalite.blade.php 350 66–106 chars 166–207 chars

Worst outliers are municipalities with compound names, e.g. "El Achech Boujarboue El Aouadna Majel Eddarj (Sfax)" → 106-char title, 207-char meta. Since the string is built from one template per file, fixing 2 files fixes all 374 pages — this is the single highest-leverage mechanical fix currently available on the site (374 pages vs. 2 for the static-page title outliers).

b) None of the 374 pages are in sitemap.xml. sites/tunisie-electricite.com/config/sitemap.php has explicit generators for /annuaire (1+24+261) but no generator was added for /coupures/{gouvernorat} or /coupures/{gouvernorat}/{municipality} when the outage feature shipped — confirmed by reading the config (comment even explains why /annuaire/* needed manual generators: underscore-prefixed templates bypass auto-discovery; the same underscore-prefixed pattern applies to coupures/_gouvernorat.blade.php and coupures/_municipalite.blade.php but was never added). Live check: grep -c '/coupures/' sitemap.xml0. Given these pages exist specifically to capture outage-related search demand — and the business review flagged a live outage crisis as the top opportunity this month — missing sitemap entries directly delay/reduce discovery and indexing of exactly the pages built to capture that demand. Fix is mechanical: add two generator closures to config/sitemap.php reading departments/tunisia-energy/data/outage-governorates.php and outage-municipalities.php, mirroring the existing /annuaire generators.

Top actions (ranked by impact/effort)

  1. [Mechanical] Add /coupures/{gouvernorat} and /coupures/{gouvernorat}/{municipality} to sitemap.xml — 374 pages currently undiscoverable via sitemap, directly tied to this month's #1 business opportunity (outage crisis). 2-generator-function fix in config/sitemap.php.
  2. [Mechanical] Shorten the title/meta template strings in coupures/_gouvernorat.blade.php and coupures/_municipalite.blade.php — 100% of 374 pages exceed both guidelines; worst cases (106/207 chars) will truncate badly in SERPs. Drop the " : signaler et suivre en direct (STEG)" suffix pattern to something shorter, and shorten the meta template sentence.
  3. [Mechanical] Add Organization/WebSite JSON-LD to the homepage — only static page with zero structured data, flagged 2 runs running.
  4. [Mechanical] Trim the 2 static-page title outliers: /steg/raccordement-gaz (76 chars) and /steg/solaire (71 chars) — flagged 2 runs running, same low-effort pattern already applied elsewhere.
  5. [Non-mechanical] ogImage site-wide (0 pages, static AND now confirmed also 0/374 on outage pages) — flagged 3rd run in a row now, needs image generation, not a quick text edit; worth escalating to a dedicated /generate-article-image pass rather than re-flagging weekly.

Still open, out of scope for this read-only skill: the Closure-route route:cache issue in sites/tunisie-electricite.com/routes/web.php (/annuaire, /annuaire/{gouvernorat}, /{gouvernorat}/{delegation}, /{gouvernorat} still Closures) — flagged 4 runs running now. Note: the newer outage routes (/coupures/{gouvernorat}, /coupures/{gouvernorat}/{municipality}) were correctly built as invokable controllers, so this is not spreading — it's an isolated legacy debt in the original directory feature.

Chain decision

5 mechanical items found (≥2 threshold). Checked gh pr list --state open --search "countryos/tn" --json title,headRefName,urlno open seo-fixes PR. Triggering countryos-trigger tn:seo-fixes implement the mechanical items from today's audit report.