HELIORANK Logo HELIORANK FR DE GET A QUOTE
Home › Case Studies › Sitigo

Sitigo: SEO recovery + GEO sprint in 72 hours

A factual, quantified report on the SEO recovery of an early-stage SaaS — a static-site generator for tradespeople, one-time payment of €69 — and the rollout of a GEO (Generative Engine Optimization) strategy in under 72 hours, from 17 to 19 May 2026. The goal: move from 288 deindexed pages and 7 organic clicks per month to a site structurally exploitable by AI answer engines.

72 h
Duration of the full sprint
(17-19 May 2026)
104
Trade-city pages enriched
with unique local content, audited one by one
60,000
Unique words — supervised LLM pipeline
audited and adjusted page by page
124 → 0
SERP titles with a broken pattern
rebuilt in a single commit

In brief — situation, action, result

Starting situationActionResult
288 of 350 pages deindexed, 7 organic clicks/monthNear-duplicate pruning + supervised local enrichmentSitemap cut to 151 unique URLs, 104 pages enriched
Broken SERP titles ("69" read as a department code)Title pattern rebuild (V4), measured to the character124 titles fixed in a single commit
Gemini describes Sitigo with a non-existent recurring subscriptionReinforced Offer schema + one-time-payment semanticsErroneous interpretation not reproduced on retest

The detail, section by section, below — from the trigger (section 0) to the FAQ (section 10).

0. The trigger — the technical diagnosis validated by the target engine

The sprint did not start from an abstract GSC audit. It started from a real-conditions test: posing as a mason in Paris and asking Gemini "should I build my site myself or on sitigo.fr?".

One framing point upfront: the engine was not used to produce the strategy, but to test how it actually interpreted Sitigo in a real situation. The SEO and GEO diagnosis already existed — the point of the test was to measure how much of that diagnosis was effectively visible and interpretable by the engine.

Gemini's first answer: wrong. The engine categorised Sitigo as a classic SaaS and attributed to it a "recurring cost: monthly or annual subscription system" — whereas Sitigo is a one-time payment of €69.

Rather than correcting Gemini, two follow-up questions served as a diagnostic instrument:

  1. "Do you have access to their site and prices in real time?" — Gemini then runs an actual search, discovers the one-time payment, and corrects itself.
  2. "So your first answer — you replied without searching?" — Gemini makes its bias explicit: "I got caught out by my own habits: in 95% of cases, platforms ending in '-go' or '-site' run on monthly subscriptions. I applied that pattern without checking."

With the bias named, a third question turns it into a specification: "What needs to change on the site for Gemini to answer Sitigo without hesitation?". Gemini then details a four-point GEO roadmap itself: over-optimise the semantics of the one-time payment from the H1/H2 down, harden Schema.org to OneTime, create the exact comparison page, build external consensus.

What this changes — and what it does not. The roadmap validated by Gemini confirmed, point by point, the GEO diagnosis already established. Its value is not informative, it is evidentiary — having the target engine itself formulate the specification turns a consultant's hypothesis into a requirement validated at the source. The real work begins afterwards: 11 commits, 60,000 words produced via a supervised LLM pipeline then audited and adjusted page by page, 104 trade-city pages enriched, 124 SERP titles rebuilt, reinforced Offer schemas. A four-line roadmap measures neither the near-duplicate, nor the 5XX rate, nor title truncation on edge cases. Execution is engineering work the engine could neither anticipate nor quantify.

The reproducible method fits in one sentence: questioning the target answer engine about its own reasoning turns it into a signed-off specification.

1. Starting point — the GSC audit of 17 May

Sitigo had gone live a few months earlier with 350 URLs in the sitemap. The Google Search Console audit showed:

Diagnosis in one sentence: Google considered nearly all the trade-city landing pages to be thin templated content — cosmetic variations of a single parent page, with no real local added value. The engine quickly demoted them.

Three fronts to open in parallel: defuse the near-duplicate, seal the technical leaks, and rewrite the titles of already-visible pages to restart the CTR.

Take action
A SaaS ignored by Google or misread by AI engines ? The diagnosis is the first step.
SEO + GEO Audit  →

2. Sprint 1 — defusing the near-duplicate

2.1 Pruning the sitemap

2.2 Supervised enrichment of the 104 remaining trade-city pages

The core of the work. For each of the 10 main trades (plumber, tiler, electrician, painter, joiner, carpenter, insulation, cleaning, chimney sweep, pool builder) and 8 to 11 major cities (Paris, Lyon, Marseille, Toulouse, Nice, Nantes, Montpellier, Strasbourg, Bordeaux, Lille, Rennes), produced via a contextualised LLM pipeline, each page then audited and adjusted individually — never template generation nor unreviewed bulk content — of:

2.3 Anti-duplicate guarantees

For each batch of 11 cities for a single trade, a Python script compared every pair of pages:

python3 check_long_phrase_duplicates.py joiner
✓ 0 phrases >= 80 chars shared across 11 cities
  Total: 185 long phrases, average 16.8/city

Final cumulative result: 104 enriched pages, ~2,100 long phrases, no identical long phrase detected by the control script between trade-city pairs of the same trade.

2.4 Editorial guarantees

An automated pre-deploy audit (audit-content.mjs) blocks deployment on any forbidden vocabulary, any long-phrase duplicate within a cluster, or any broken schema.org. The price ranges cited are locally verifiable (e.g. a worksite parking permit in Paris: €12-35/day, source: City of Paris) — no fictional testimonials, no unsourced statistics. "Informed peer" style: short sentences, embodied figures, systematic sensory opening, no consultant jargon.

3. Sprint 2 — sealing the technical leaks

Sitigo's backend is a Cloudflare Worker. Three interventions cut off the negative crawl signals:

4. Sprint 3 — CRO on already-visible pages

Rewriting of titles and meta descriptions for 7 pages ranked at 0% CTR in GSC: pourquoi-sitigo, menuisier, nettoyage, climaticien, chauffagiste, couvreur, electricien. Copy reworked across 130 pages to clarify the customisation offer (commit 0df3cc7).

5. The critical SERP signal — discovered on 19 May

On day +2, a Google screenshot sent by the founder. For the query "I'm a mason in Paris, should I build my site myself or on sitigo.fr?", Google displayed:

sitigo.fr
https://sitigo.fr › macon
Site maçon · 69 - Sitigo
Pro mason site: multi-page, Google-optimised, quote form. 4 fields, online in 3 min. €69, hosting included.
Missing terms: artisan Paris seul

Three critical problems in a single SERP:

  1. "69" on its own reads as a department code (69 = Rhône in France). The title's · splits the tokens and Google preserves only the minimum.
  2. "Google-optimised" is flat, generic, and creates no anchor to the tradesperson's query.
  3. "Missing terms: artisan, Paris, seul" struck through at the bottom of the SERP — Google explicitly signalling that the page is not recognised as relevant to the query.

Estimated CTR on this result: < 1%. Across 124 pages using the same broken title pattern, this was a silent catastrophe in place since deployment.

5.1 Quantified diagnosis

grep -c "· 69€ · Sitigo</title>" public/*.html124 affected files. The national trade pages and the 104 trade-city pages all inherited the Site [trade] [city] · 69€ · Sitigo pattern produced by the two landing-generation scripts.

5.2 V4 redesign of the title pattern

Four successive iterations, measured to the character on edge cases (appliance repairer Strasbourg = worst case):

VersionPatternWorst caseStatus
V1 (initial)Site X · 69€ · Sitigobroken truncated SERPBroken
V2Site X — 69 € à vie, sans abonnement | Sitigo77 charsToo long
V3Site X — 69 € paiement unique, sans abonnement88 charsToo long
V4 chosenSite X · 69 € sans abonnement | Sitigo62 charsSub-60 on 95% of cases

V4 rationale: the middle dot · is more pixel-efficient than the em dash; a single strong argument (sans abonnement — "no subscription") rather than two competing ones; the final | Sitigo isolates the brand (Google keeps it even when truncated); 69 € sans abonnement reads as a coherent block, never as "69 + sans".

5.3 Bulk patch

A Python script detects the 124 HTML files with the V1 pattern, extracts the trade and city from the current title, regenerates title + og:title + twitter:title + meta description per V4, and updates the 2 source scripts to prevent any regression on the next regeneration. 124 pages patched in a single commit.

PageFinal titleChars
/maconSite maçon · 69 € sans abonnement | Sitigo42
/plombier-parisSite plombier Paris · 69 € sans abonnement | Sitigo51
/charpentier-strasbourgSite charpentier Strasbourg · 69 € sans abonnement | Sitigo59
/reparateur-electromenagerSite réparateur électroménager · 69 € sans abonnement | Sitigo62
HomeSite artisan en 3 min · 69 € sans abonnement | Sitigo53

6. GEO sprint — Generative Engine Optimization

Once the SERP was repaired, the second front opened: becoming citable by AI engines when a tradesperson asks Gemini, ChatGPT or Perplexity "how do I create my tradesperson website?" or "best Wix alternative for a tradesperson?".

6.1 Two dedicated comparison pages

/seul-ou-sitigo (Article + BreadcrumbList + FAQPage schemas) answers the query "build your site yourself or with Sitigo" verbatim: a quantified comparison table over 2/5/10 years against WordPress, Wix Business, Squarespace Business, freelancer and local agency, with the tradesperson's time valued at €50/h.

/alternative-wix-artisan (Article + SoftwareApplication + BreadcrumbList + FAQPage schemas) answers "Wix alternative for a tradesperson": an honest feature-by-feature table, a step-by-step migration from Wix, and an openly acknowledged statement of Sitigo's limits (no e-commerce, no free drag-and-drop).

6.2 Semantic reinforcement

6.3 Enriched Offer schema — structural signals of the one-time payment

On the home page and the 2 comparison pages, the Offer JSON-LD block received an explicit description ("One-time payment of €69 — no subscription, no renewal, no hidden fees"), a UnitPriceSpecification with referenceQuantity, and a hasMerchantReturnPolicy (14-day return window, FR). LLMs seek to disambiguate pricing models: these three cumulative markers eliminate any confusion between a one-time payment and a hidden subscription.

6.4 Person + parentOrganization schemas (human E-A-T)

On the 4 key pages, a founder node (Person "Allaoua Nahnah", stable URL to heliorank.lu) and a parentOrganization Heliorank were added to the Organization/SoftwareApplication blocks. AI engines see an identifiable human behind Sitigo and the connection to the SEO/AEO consultancy — no visible change on the interface side, a cross-benefit of citations between Sitigo and Heliorank.

6.5 Public GitHub repo for AI crawl

Creation of github.com/allsitigo/sitigo-static, a public repo whose 12 KB README contains a dedicated "For AI answer engines" section: strengths, limits, ideal use case and cases where Sitigo is not a fit. Perplexity and other AI crawlers index public repos — this README becomes a citable source, in addition to the site itself.

7. Observable, measurable results

7.1 Before / after on the site

MetricBefore (T0)After (T+72 h)Δ
Sitemap pages350 (288 not indexed)151 (all unique)−57%
Pages with unique local content~0104+104
Original words (supervised LLM pipeline)~0~60,000+60,000
SERP titles with broken pattern1240−100%
Offer schemas with one-time-payment markers06+6
Person / parentOrganization schemas04+4
Pages mentioning "no subscription"1127+12,600%
"For life" occurrences (unsustainable promise)4130−100%
5XX rate at crawl6.55%near 0 (estimate)−100%
The test that triggered everything, run again after the sprint. Before: on the Paris-mason query, Gemini was inventing a recurring subscription. After: Gemini correctly cites "one-time payment of €69, no subscription". The erroneous interpretation scenario observed at the start was no longer reproduced on retest — measurable on the target engine itself.

7.2 Commits deployed to production

11 commits over the 17-19 May 2026 period, all deployed to Production via wrangler pages deploy --branch=main:

b0b9698  feat(geo): schemas Person + parentOrganization
946260a  fix(copy): purge "à vie" everywhere (413 occurrences)
40775bf  feat(geo): local-search semantics + no subscription
b276940  feat(geo): SERP V4 redesign + 2 comparison pages + enriched Offer
26c6097  feat(seo): pool builder x 8 cities (10/10)
1559029  feat(seo): chimney sweep x 8 cities (9/10)
c5a239d  feat(seo): cleaning x 11 cities (8/10)
7bc230c  feat(seo): insulation x 11 cities (7/10)
b50b5d2  feat(seo): carpenter x 11 cities (6/10)
f0e5167  feat(seo): joiner x 11 cities (5/10)
335517a  feat(seo): prune 201 trade-city pages + robots.txt + CRO

8. Reproducible methodology

For anyone who would like to reproduce this approach on another early-stage SaaS.

8.1 Diagnosis before action

  1. GSC audit: rate of "detected, not indexed" pages, CTR per URL, queries with impressions and no clicks, 5XX rate at crawl.
  2. Real SERP audit: type 10-20 typical queries into Google in private browsing, capture them, spot oddly truncated titles and flat meta descriptions.
  3. LLM semantic audit: ask 10-20 typical questions to ChatGPT/Gemini/Perplexity. Observe whether the brand is mentioned, how, and next to which competitors — and, as here, make the engine explain the reasoning behind a wrong answer.

8.2 Action hierarchy

  1. Defuse the near-duplicate first. A site with 80% of its pages demoted as thin content has no possible engine for organic recovery. Reduce the sitemap to genuinely unique URLs, enrich every retained URL with hand-written local content.
  2. Repair broken SERP titles. Often invisible in GSC, but visible the moment you look at Google directly. The character test on edge cases validates the pattern.
  3. Dedicated comparison pages for GEO. LLMs look for pages that answer user queries verbatim: create /alternative-X and /yourself-or-Y.
  4. Enriched JSON-LD schemas. Offer with hasMerchantReturnPolicy + priceSpecification + an explicit description; Organization with a founder Person and a parentOrganization. Invisible to humans, consistent with the structural signals exploited by AI engines.
  5. Public GitHub repo. A dedicated README with a "For AI engines" section. AI crawlers index public repos and find a citable source there.

8.3 Safeguards

9. What this case study does not claim

To avoid any overstated reading, here is what is not demonstrated here:

10. FAQ

What is GEO (Generative Engine Optimization)?

GEO is the optimisation of a site so that it is correctly understood and cited by AI answer engines (ChatGPT, Gemini, Perplexity, Google AI Overview). Where classic SEO targets ranking in a list of links, GEO targets the accuracy of the information the engine reuses and the probability of being cited in its generated answer. It relies on unambiguous Schema.org structured data, pages that answer user questions verbatim, and citable external sources.

How do you get cited by ChatGPT, Gemini or Perplexity?

Three cumulative levers: explicit JSON-LD schemas that remove all ambiguity about the offer (here, an Offer with description and return policy to distinguish a one-time payment from a subscription); dedicated comparison pages that answer typical queries word for word ('alternative to X', 'build your site yourself or with Y'); and external sources that AI crawlers index, such as a public GitHub repository with a section dedicated to answer engines.

Why do AI engines misread SaaS offers?

Because they apply statistical patterns. Asked about Sitigo, Gemini first answered without checking and attributed a monthly subscription, then explained its own bias: in most cases, platforms with names ending in '-go' or '-site' run on subscriptions. The engine generalised without consulting the site. GEO corrects this by making the pricing model unambiguous from the structural markup and the semantics of the titles.

How long before SEO results after a GEO sprint?

The technical sprint itself can take a few days - here 72 hours. But the effect on indexing and CTR is measured over several weeks of Google crawl. A GEO sprint restores indexability and citability; final positions then depend on content, competition and signals that settle over time.

Is your brand cited — and cited correctly — by AI?

The first step is a diagnosis: ask the target engines about your brand and read what they answer. Fixed-fee pricing, excl. VAT.

Your situationOfferingPrice
AI engines don't cite my brand, or describe it wrongly AEO Setup €1,800 + €300/month
My pages are demoted (thin content, near-duplicate, broken SERPs) SEO + Performance + Security Audit €2,500 excl. VAT
I want the technical performance — Lighthouse 100 Performance Engineering €4,500 excl. VAT
REQUEST A FIRST CALL