2026-08-17-seo-audit.md
countries/tn/reports/2026-08-17-seo-audit.md
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/coupuresstill 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)
- [Escalate — out of TN scope]
FaqAnswer/accordion schema regression droppingFAQPageon/steg/numero-vert— new this run, needs a dev with PHP access to reproduce and fix the shared component, not a TN-scoped PR. - [Non-mechanical] ogImage site-wide — 387 pages with none, needs
/generate-article-image, 6th run flagged. - [Non-mechanical] FAQ sections (→
FAQPageschema) 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.