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

2026-08-17-seo-audit.md

countries/tn/reports/2026-08-17-seo-audit.md

seo-audit tn written 17/08/2026 06:04 ← previous seo-audit next seo-audit →

SEO Audit — tunisie-electricite.com — 2026-08-17

Diffed against reports/2026-08-10-seo-audit.md. git log origin/develop --since=2026-08-10 -- sites/tunisie-electricite.com departments/tunisia-energy returns zero commits — no TN content or template changed since the last audit. Despite that, one live regression was found this run, caused by a fleet-wide shared-component change (see §5). No open countryos/tn PR exists (gh pr list checked first).

1. Live site health

All 16 checked URLs returned 200 OK, response times 0.08–0.23s. sitemap.xml (673 URLs, 374 of them /coupures/*, confirmed unchanged) and robots.txt both healthy.

URL Status
/, /tarifs, /tarifs-gaz, /steg, /coupures, /annuaire, /sitemap.xml, /robots.txt 200
/steg/coupures, /steg/facture, /steg/numero-vert, /steg/raccordement, /steg/raccordement-gaz, /steg/service-client, /steg/solaire, /mentions-legales 200

2. Page audits (13 static pages)

Title/meta lengths re-measured live with node (decoding HTML entities properly this time — a raw .length on the still-encoded string, e.g. ', overstates length by up to 5 chars per apostrophe; caught and corrected before reporting). All 13 pages are within guideline (title ≤65, meta ≤160), matching the 08-10 report exactly except the one regression below.

Page Score Δ Note
/tarifs 96 unchanged; title 65, meta 140
/tarifs-gaz 93 unchanged; title 64, meta 159
/coupures 92 unchanged; title 66, meta 156
/steg 91 unchanged; title 52, meta 157
/steg/raccordement-gaz 90 unchanged; title 52, meta 154
/steg/numero-vert 84 −6 regression — FAQPage schema no longer renders (was 90, was the only /steg/* subpage with it). See §5.
/steg/solaire 89 unchanged; title 51, meta 149
/steg/service-client 88 unchanged; title 61, meta 146
/steg/facture 87 unchanged; title 56, meta 153
/steg/raccordement 86 unchanged; title 56, meta 149
/mentions-legales 82 unchanged; title 38, meta 159
/steg/coupures 80 unchanged, still no schema beyond breadcrumb
/ (homepage) 89 unchanged, Organization+WebSite JSON-LD confirmed still live

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

Outage pages (/coupures/{gouvernorat}[/{municipality}], 374 pages): unchanged, sitemap coverage confirmed (grep -c '/coupures/' sitemap.xml → 374), title/meta templates still hold at the worst-case real name. Score ~90/100, carried forward — no re-render needed since nothing touched the template.

3. Directory spot-check (5 pages)

/annuaire/le-kef, /le-kef/nebeur, /annuaire/gafsa, /gafsa/metlaoui, /coupures/la-manouba/oued-ellil — all 200, real data, correct title/meta. Slugs resolved from governorates.json/outage-municipalities.php before constructing URLs, per the standing rule (3rd+ time this mistake has been avoided rather than repeated).

4. og:image / FAQ tracking (unchanged, still non-mechanical)

  • ogImage: still 0/13 static pages + 0/374 outage pages. Flagged 6 runs running now.
  • FAQ accordions: /steg/facture, /steg/raccordement, /steg/raccordement-gaz, /steg/service-client, /steg/solaire, /steg/coupures still have no FAQ section/schema (unchanged, editorial work).

5. New finding — FAQPage schema regression on /steg/numero-vert, likely fleet-wide

/steg/numero-vert was the one /steg/* subpage with a working FAQPage JSON-LD block (confirmed live in the 08-10 report). This run it's gone: the page still renders its 5-question accordion HTML correctly (verified in the raw response), but the <script type="application/ld+json"> block for FAQPage no longer appears — only the BreadcrumbList script remains. Confirmed with a cache-busting fetch (cf-cache-status: MISS), so this is not stale-cache noise; it's what the current build actually renders.

Root cause is not in the TN site — git log on TN paths is empty since 08-10. It traces to a fleet-wide shared-component change already on origin/develop: commit 5fcc623d66f (2026-08-14, PR #15759, "comparador-alarmas.es") introduced app/Support/FaqAnswer.php and rewrote resources/views/components/accordion/index.blade.php to build $faqSchema only if ($faqEntities) — an empty PHP array is falsy, so if every item's flattened answer comes back empty, the whole schema block silently disappears instead of degrading per-item. A live spot-check on a different site using the same component (actuneuf.com/sfr/service-client/adresse) still shows FAQPage schema fine, so this isn't a global break — something specific to the numero-vert FAQ content (5 items, one of them Arabic RTL: dir="rtl" lang="ar") is tripping FaqAnswer::fromHtml(). Could not pin down the exact trigger further: no PHP runtime or Docker is available in this environment to execute FaqAnswer::fromHtml() directly against the real content and see which item(s) return empty.

This is evidence of a JSON-LD regression, which is normally a mechanical category — but the fix lives in a shared component outside TN scope (resources/views/components/, app/Support/), not in sites/tunisie-electricite.com/ or departments/tunisia-energy/. Per the hard scope rule, this skill cannot and should not edit it, and tn:seo-fixes shouldn't either (a country-scoped branch has no business patching a fleet-wide component blind, without a way to test it end-to-end). This needs its own cross-site bug task, ideally by whoever owns app/Support/FaqAnswer.php/PR #15759, with a repro: /steg/numero-vert on tunisie-electricite.com, expected a 5-question FAQPage block, currently emits none.

Top actions (ranked by impact/effort)

  1. [Escalate — out of TN scope] FaqAnswer/accordion schema regression dropping FAQPage on /steg/numero-vert — new this run, needs a dev with PHP access to reproduce and fix the shared component, not a TN-scoped PR.
  2. [Non-mechanical] ogImage site-wide — 387 pages with none, needs /generate-article-image, 6th run flagged.
  3. [Non-mechanical] FAQ sections (→ FAQPage schema) on the 6 /steg/* subpages that lack one.

Chain decision

Zero in-scope mechanical items this run. The one JSON-LD regression found is mechanical in category but not in scope (fix lives outside sites/tunisie-electricite.com/ and departments/tunisia-energy/) — chaining tn:seo-fixes on it would mean editing a shared fleet component from a country-scoped branch, which is out of bounds per the hard rules. Did not trigger tn:seo-fixes.