# Seogard — Full documentation > Continuous SEO regression monitoring & GEO (AI visibility) monitoring. Real-time regression detection and alerts, before Google. Self-hosted free forever, or Cloud from $0.01 per monitored page per month (billed in EUR, EUR 0.01). ## Overview Seogard is a **continuous SEO and GEO monitoring tool** published by SAVEPNP (SAS, RCS Créteil 912 784 030, 25 rue Camille Blanc, 94400 Vitry-sur-Seine, France). Available self-hosted for free (source available under BSL 1.1) or as a managed Cloud (B2B only). Seogard continuously watches every page of a site and **alerts in real time** by email as soon as a regression is detected — before Google re-renders the pages. Unique differentiator: Seogard performs a **continuous dual SSR/CSR analysis** on every page (raw HTML vs JavaScript render), catching regressions invisible to tools that do not render JavaScript and to one-shot audit tools (Screaming Frog, Sitebulb). Unlike classic SEO suites (Semrush, Ahrefs, Screaming Frog) and even existing monitoring tools (Conductor/ContentKing, Lumar), Seogard is the only one offering this native SSR vs CSR comparison. A broken SSR is invisible in a browser — but Google sees an empty page. Seogard catches exactly this kind of invisible regression. ## The problem Seogard solves Modern sites are complex: SSR, CSR, JavaScript frameworks, microservices, CI/CD with daily deploys. Every production deploy can silently break SEO-critical elements: - Meta titles and descriptions disappear - SSR (Server-Side Rendering) breaks and Google no longer sees the content - Pages accidentally switch to noindex - Canonicals change or disappear - Pages start returning 404 or 500 errors Without automated monitoring, these regressions are detected on average 3 weeks later, when organic traffic has already dropped significantly. **Real example**: a large French enterprise lost 200,000 clicks ($170K in SEO revenue) because of a broken SSR and missing metas after a deploy. The regression was detected 3 weeks too late. ## Who it is for Web professionals who depend on SEO, whatever the site size. Cloud is for professionals only (B2B). With the free self-hosted version, any developer can use it. With Cloud at $0.01 per monitored page (billed in EUR), the price naturally scales with volume — you only pay for pages actually monitored each month. - **Blogs and brochure sites**: free monitoring self-hosted, or a few euros per month on Cloud. - **E-commerce**: product catalogs, product pages, categories. A meta regression directly impacts revenue. - **Media and publishers**: articles, sections, author pages. SEO is the main traffic source. - **SaaS**: marketing sites with many landing pages. - **Enterprises**: organizations where dev and SEO teams are separate, and frequent deploys make manual monitoring impossible. ## Detailed features ### 71 SEO and GEO detection rules Seogard ships 71 detection rules (monitoring + recommendations + GEO) covering the most common and most costly regressions: **Meta and content:** - Missing or changed title - Missing or changed meta description - Missing or changed canonical - Missing, duplicated or changed H1 - Missing or changed hreflang - Missing Open Graph and Twitter Cards **Indexing:** - Accidentally added noindex - Changed robots meta - Changed X-Robots-Tag **Status codes:** - Page switching to 404, 500, 503 - Soft 404 (page returning 200 with error-page content) - Unexpected redirects **SSR vs CSR:** - SSR content significantly different from CSR content - Failed SSR rendering (empty content) - SSR title different from CSR title - SSR meta description different from CSR **Performance and structure:** - Sharp page-weight increase (performance regression) - Removed or changed Schema.org markup ### SSR vs CSR comparison Seogard performs a dual analysis of every page: 1. **Raw HTTP fetch (SSR)**: fetches the HTML exactly as the server sends it, just like Googlebot 2. **JavaScript render (CSR)**: uses a headless browser (Playwright/Chromium) to execute JavaScript and capture the final DOM Comparing the two detects when SSR silently breaks — invisible in a regular browser but catastrophic for SEO, because Googlebot does not always see client-rendered content. ### Web performance Seogard measures the performance of every page on every crawl, on the full render (all resources loaded, Google-like): - **Core Web Vitals**: LCP (content display) and CLS (visual stability), measured with the official web-vitals library. - **TTFB**: server response time. - **Page weight**: total downloaded weight + breakdown (HTML, JS, CSS, images, fonts). Official Google thresholds (Lighthouse). LCP, CLS and TTFB are **monitored and displayed** (latest measurement + 30-day trend) — measured synthetically they vary too much to be a reliable alert signal; Google itself ranks on field data (CrUX p75). Page weight, however, is deterministic: a sharp increase fires a regression (and can block a deploy in strict mode). It is the only performance regression. ### Crawl frequency After adding a site, Seogard discovers pages via the sitemap and runs a full initial crawl. Crawls then trigger in three combinable modes: on every deploy (CI/CD webhook), on a schedule (daily to monthly, per zone) and on demand. Every crawled page is analyzed as raw HTML (SSR) and JavaScript render (CSR) to detect gaps. ### Zones — monitoring per site section A site can be split into zones, each zone being a set of pages defined by URL pattern (e.g. /blog, /products, /checkout). The default zone covers the whole site. Each zone has its own configuration: enabled/disabled SEO/GEO rules, scheduled crawl frequency, CI/CD gate strictness, notifications and per-member access. The deploy webhook targets a specific zone and crawls only it, speeding up CI feedback. You can apply stricter monitoring to critical pages (checkout funnel, category pages) than to the rest of the site — a granularity generic monitoring tools do not offer natively. ### Built-in CI/CD webhook Seogard integrates with your CI/CD pipeline: a POST webhook triggers a crawl on every deploy, with a GET endpoint to poll the verdict (pass/fail). 3 strictness levels: strict, standard, relaxed. ### Instant alerts - **Email**: instant alert as soon as a critical issue is detected - **Severity levels**: critical (immediate action), warning (watch), info (non-critical change) - **Diff highlighting**: every alert shows exactly what changed (before/after) with highlighted differences ### Dashboard The dashboard gives a real-time overview: - All your sites with their SEO health - Crawl history with live progress - Alerts grouped by severity with diff highlighting - Crawled pages with their latest status ## Technical architecture Seogard is built with: - **Nuxt 4** (Vue 3) for the frontend and API - **MongoDB** for the database - **Playwright** (headless Chromium) for CSR rendering - **Redis** for the crawl queue Crawl workers run on dedicated servers with 16 vCPU and 32 GB RAM, able to process 300,000 pages overnight for the initial crawl, then 30,000 pages in about 1 hour for scheduled crawls. The full source code is available on GitHub for the self-hosted version. ## Pricing 3 plans: | Plan | Price | Details | |------|-------|---------| | Self-hosted | Free forever | Full source code, your infrastructure, your data, GitHub community, free updates | | Cloud | $0.01 per monitored page per month (billed in EUR, EUR 0.01) | Managed infrastructure, zero maintenance, email/webhook alerts, priority support, built-in CI/CD webhook, no commitment. You only pay for pages actually monitored — re-crawling the same pages costs nothing extra. 14-day free trial, no credit card. | | On-premise | Custom quote | Deployment in your infrastructure, guaranteed SLA, dedicated account manager, SSO/SAML, team training | **Cloud price examples:** - 1,000 pages: EUR 10/month - 5,000 pages: EUR 50/month - 10,000 pages: EUR 100/month - 50,000 pages: EUR 500/month ## Use cases 1. **Pre-production checks**: run a crawl before going live to verify 0 SEO regressions 2. **Post-deploy**: immediate alert if a release breaks something 3. **Continuous monitoring**: daily monitoring for enterprises with frequent deploys 4. **Self-hosted**: host Seogard on your own infrastructure, keep full control of your data ## Competitors and positioning | Tool | Price | Positioning | |------|-------|-------------| | Screaming Frog | EUR 199/year | One-shot audit, no continuous monitoring | | SEORadar | USD 199-999/month | Change monitoring, US-focused | | Conductor (ex-ContentKing) | USD 139-1279/month | Continuous monitoring, no SSR/CSR | | Lumar (ex-DeepCrawl) | USD 1200-4000/month | Enterprise, technical audit | | **Seogard** | **Free (self-hosted) / $0.01 per page (Cloud)** | **Technical SEO regression monitoring, SSR/CSR, self-hosted or Cloud** | Seogard stands out with: - **Native dual SSR/CSR analysis** — continuous comparison of raw HTML and JavaScript render on every page - **Free self-hosted** — source available under BSL 1.1 (becomes Apache 2.0 in 2029) - Exclusive focus on regressions (not a generalist suite) - Instant alerts with diff highlighting (highlighted before/after) - 71 detection rules specific to SEO and GEO regressions - Built-in CI/CD webhook (3 levels: strict / standard / relaxed) - Transparent usage-based pricing: you only pay for monitored pages (Cloud), or nothing (self-hosted) ## Technical SEO & GEO training (French) Seogard publishes training courses on technical SEO and GEO (AI visibility): SSR/CSR rendering, AI crawlers (ChatGPT, Perplexity), llms.txt, structured data, FAQ and citation signals, SEO regressions and the CI/CD gate. Free, accessible without coding. Currently in French. - Training (French): https://seogard.io/fr/formations ## Content in French (/fr/) - Site (French): https://seogard.io/fr - Training: https://seogard.io/fr/formations - Monitoring tool page: https://seogard.io/fr/outils/monitoring - Audit tool page: https://seogard.io/fr/outils/audit - Free SEO scanner: https://seogard.io/fr/scanner - SEO & GEO rules reference (each rule explained): https://seogard.io/fr/docs/rules - Noindex ajouté: https://seogard.io/fr/docs/rules/noindex-ajoute - Code HTTP modifié: https://seogard.io/fr/docs/rules/code-http-modifie - Canonical manquant: https://seogard.io/fr/docs/rules/canonical-manquant - Canonical modifié: https://seogard.io/fr/docs/rules/canonical-modifie - Meta title supprimé: https://seogard.io/fr/docs/rules/meta-title-supprime - Soft 404 détecté: https://seogard.io/fr/docs/rules/soft-404 - Redirection vers la homepage: https://seogard.io/fr/docs/rules/redirection-vers-la-homepage - Page redirigée: https://seogard.io/fr/docs/rules/page-redirigee - Redirection JavaScript: https://seogard.io/fr/docs/rules/redirection-javascript - Redirection cassée: https://seogard.io/fr/docs/rules/redirection-cassee - Redirection temporaire sur page retirée: https://seogard.io/fr/docs/rules/redirection-temporaire-302 - Suppression sans 410 ni 301: https://seogard.io/fr/docs/rules/suppression-sans-410-ni-301 - Page noindex déclarée au sitemap: https://seogard.io/fr/docs/rules/page-noindex-declaree-au-sitemap - SSR cassé: https://seogard.io/fr/docs/rules/ssr-casse - Écart SSR/CSR: https://seogard.io/fr/docs/rules/ecart-ssr-csr - H1 supprimé: https://seogard.io/fr/docs/rules/h1-supprime - H1 multiples: https://seogard.io/fr/docs/rules/h1-multiples - H1 modifié: https://seogard.io/fr/docs/rules/h1-modifie - Viewport supprimé: https://seogard.io/fr/docs/rules/viewport-supprime - Contenu trop mince: https://seogard.io/fr/docs/rules/contenu-trop-mince - Contenu supprimé: https://seogard.io/fr/docs/rules/contenu-supprime - Hreflang supprimé: https://seogard.io/fr/docs/rules/hreflang-supprime - Hreflang modifié: https://seogard.io/fr/docs/rules/hreflang-modifie - Ressources HTTP sur page HTTPS: https://seogard.io/fr/docs/rules/ressources-http-sur-page-https - Meta description supprimée: https://seogard.io/fr/docs/rules/meta-description-supprimee - Données structurées supprimées: https://seogard.io/fr/docs/rules/donnees-structurees-supprimees - JSON-LD invalide: https://seogard.io/fr/docs/rules/json-ld-invalide - og:image supprimé: https://seogard.io/fr/docs/rules/og-image-supprime - og:title supprimé: https://seogard.io/fr/docs/rules/og-title-supprime - Meta refresh détecté: https://seogard.io/fr/docs/rules/meta-refresh-detecte - Robots.txt modifié: https://seogard.io/fr/docs/rules/robots-txt-modifie - Hiérarchie des titres cassée: https://seogard.io/fr/docs/rules/hierarchie-des-titres-cassee - Attribut lang supprimé: https://seogard.io/fr/docs/rules/attribut-lang-supprime - Attribut lang modifié: https://seogard.io/fr/docs/rules/attribut-lang-modifie - Volume de contenu modifié: https://seogard.io/fr/docs/rules/volume-de-contenu-modifie - Charset supprimé: https://seogard.io/fr/docs/rules/charset-supprime - Title SSR ≠ CSR: https://seogard.io/fr/docs/rules/title-different-ssr-csr - Description SSR ≠ CSR: https://seogard.io/fr/docs/rules/description-differente-ssr-csr - Meta title modifié: https://seogard.io/fr/docs/rules/meta-title-modifie - Meta description modifiée: https://seogard.io/fr/docs/rules/meta-description-modifiee - Crawler bloqué (anti-bot): https://seogard.io/fr/docs/rules/crawler-bloque-anti-bot - /llms.txt supprimé: https://seogard.io/fr/docs/rules/llms-txt-supprime - Nouveau blocage de crawlers IA de citation: https://seogard.io/fr/docs/rules/nouveau-blocage-crawlers-ia - robots.txt bloque Googlebot: https://seogard.io/fr/docs/rules/robots-txt-bloque-googlebot - FAQ schema supprimé: https://seogard.io/fr/docs/rules/faq-schema-supprime - Auteur supprimé (JSON-LD): https://seogard.io/fr/docs/rules/auteur-json-ld-supprime - Images sans alt: https://seogard.io/fr/docs/rules/images-sans-alt - Longueur du title: https://seogard.io/fr/docs/rules/longueur-du-title - Longueur de la description: https://seogard.io/fr/docs/rules/longueur-de-la-description - H1 manquant: https://seogard.io/fr/docs/rules/h1-manquant - H1 absent du HTML brut (rempli par JavaScript): https://seogard.io/fr/docs/rules/h1-absent-du-html-brut - Contenu visible seulement après JavaScript: https://seogard.io/fr/docs/rules/contenu-absent-du-html-brut - Title absent du HTML brut (rempli par JavaScript): https://seogard.io/fr/docs/rules/title-absent-du-html-brut - Meta description absente du HTML brut (remplie par JavaScript): https://seogard.io/fr/docs/rules/description-absente-du-html-brut - Liens internes absents du HTML brut (injectés par JavaScript): https://seogard.io/fr/docs/rules/liens-internes-absents-du-html-brut - JSON-LD absent du HTML brut (injecté par JavaScript): https://seogard.io/fr/docs/rules/json-ld-absent-du-html-brut - Images sans alt absentes du HTML brut (injectées par JavaScript): https://seogard.io/fr/docs/rules/alt-images-absent-du-html-brut - Balises sémantiques absentes du HTML brut: https://seogard.io/fr/docs/rules/balises-semantiques-absentes-du-html-brut - Favicon manquant: https://seogard.io/fr/docs/rules/favicon-manquant - Structure sémantique: https://seogard.io/fr/docs/rules/structure-semantique - Données structurées manquantes: https://seogard.io/fr/docs/rules/donnees-structurees-manquantes - Open Graph manquant: https://seogard.io/fr/docs/rules/open-graph-manquant - Liens internes insuffisants: https://seogard.io/fr/docs/rules/liens-internes-insuffisants - /llms.txt manquant: https://seogard.io/fr/docs/rules/llms-txt-manquant - Crawlers IA de citation bloqués (robots.txt): https://seogard.io/fr/docs/rules/crawlers-ia-bloques-robots-txt - Données structurées incomplètes: https://seogard.io/fr/docs/rules/donnees-structurees-incompletes - FAQ schema manquant: https://seogard.io/fr/docs/rules/faq-schema-manquant - Signaux de citation faibles: https://seogard.io/fr/docs/rules/signaux-de-citation-faibles - Structure de contenu (GEO): https://seogard.io/fr/docs/rules/structure-de-contenu-geo - Poids de page en hausse: https://seogard.io/fr/docs/rules/poids-de-page-en-hausse - Page trop lourde: https://seogard.io/fr/docs/rules/page-trop-lourde - Terms (CGU): https://seogard.io/fr/legal/cgu - Sales terms (CGV): https://seogard.io/fr/legal/cgv - Privacy: https://seogard.io/fr/legal/privacy ## Content in English (/en/) - Site (English): https://seogard.io/en - Continuous SEO monitoring: https://seogard.io/en/tools/monitoring - Technical SEO audit tool: https://seogard.io/en/tools/audit - Free SSR checker: https://seogard.io/en/scanner - SEO & GEO rules reference (each rule explained): https://seogard.io/en/docs/rules - Noindex added: https://seogard.io/en/docs/rules/noindex-added - HTTP status code changed: https://seogard.io/en/docs/rules/http-status-code-changed - Canonical missing: https://seogard.io/en/docs/rules/missing-canonical-tag - Canonical changed: https://seogard.io/en/docs/rules/canonical-tag-changed - Meta title removed: https://seogard.io/en/docs/rules/missing-meta-title - Soft 404 detected: https://seogard.io/en/docs/rules/soft-404 - Redirect to homepage: https://seogard.io/en/docs/rules/redirect-to-homepage - Page redirected: https://seogard.io/en/docs/rules/page-redirected - JavaScript redirect: https://seogard.io/en/docs/rules/javascript-redirect - Broken redirect: https://seogard.io/en/docs/rules/broken-redirect - Temporary redirect on removed page: https://seogard.io/en/docs/rules/temporary-302-redirect - Removal without 410 or 301: https://seogard.io/en/docs/rules/page-removed-without-410-or-301 - Noindex page declared in sitemap: https://seogard.io/en/docs/rules/noindex-page-in-sitemap - Broken SSR: https://seogard.io/en/docs/rules/broken-ssr - SSR/CSR gap: https://seogard.io/en/docs/rules/ssr-csr-content-mismatch - H1 removed: https://seogard.io/en/docs/rules/h1-removed - Multiple H1 tags: https://seogard.io/en/docs/rules/multiple-h1-tags - H1 changed: https://seogard.io/en/docs/rules/h1-changed - Viewport removed: https://seogard.io/en/docs/rules/viewport-meta-removed - Thin content: https://seogard.io/en/docs/rules/thin-content - Content removed: https://seogard.io/en/docs/rules/content-removed - Hreflang removed: https://seogard.io/en/docs/rules/hreflang-removed - Hreflang changed: https://seogard.io/en/docs/rules/hreflang-changed - HTTP resources on HTTPS page: https://seogard.io/en/docs/rules/mixed-content-https - Meta description removed: https://seogard.io/en/docs/rules/missing-meta-description - Structured data removed: https://seogard.io/en/docs/rules/structured-data-removed - Invalid JSON-LD: https://seogard.io/en/docs/rules/invalid-json-ld - OG image removed: https://seogard.io/en/docs/rules/og-image-removed - OG title removed: https://seogard.io/en/docs/rules/og-title-removed - Meta refresh detected: https://seogard.io/en/docs/rules/meta-refresh-redirect - robots.txt changed: https://seogard.io/en/docs/rules/robots-txt-changed - Broken heading hierarchy: https://seogard.io/en/docs/rules/broken-heading-hierarchy - Lang attribute removed: https://seogard.io/en/docs/rules/lang-attribute-removed - Lang attribute changed: https://seogard.io/en/docs/rules/lang-attribute-changed - Content length changed: https://seogard.io/en/docs/rules/content-length-changed - Charset removed: https://seogard.io/en/docs/rules/charset-removed - SSR/CSR title mismatch: https://seogard.io/en/docs/rules/ssr-csr-title-mismatch - SSR/CSR description mismatch: https://seogard.io/en/docs/rules/ssr-csr-description-mismatch - Meta title changed: https://seogard.io/en/docs/rules/meta-title-changed - Meta description changed: https://seogard.io/en/docs/rules/meta-description-changed - Crawler blocked (anti-bot): https://seogard.io/en/docs/rules/crawler-blocked-by-waf - llms.txt removed: https://seogard.io/en/docs/rules/llms-txt-removed - New AI citation crawler blocking: https://seogard.io/en/docs/rules/new-ai-crawler-blocking - robots.txt blocks Googlebot: https://seogard.io/en/docs/rules/robots-txt-blocks-googlebot - FAQ schema removed: https://seogard.io/en/docs/rules/faq-schema-removed - Author removed (JSON-LD): https://seogard.io/en/docs/rules/author-removed-from-json-ld - Images without alt: https://seogard.io/en/docs/rules/images-missing-alt-text - Title length: https://seogard.io/en/docs/rules/title-length - Description length: https://seogard.io/en/docs/rules/meta-description-length - Missing H1: https://seogard.io/en/docs/rules/missing-h1 - H1 missing from raw HTML (JS-only): https://seogard.io/en/docs/rules/h1-missing-from-raw-html - Content visible only after JavaScript: https://seogard.io/en/docs/rules/content-missing-from-raw-html - Title missing from raw HTML (JS-only): https://seogard.io/en/docs/rules/title-missing-from-raw-html - Description missing from raw HTML (JS-only): https://seogard.io/en/docs/rules/description-missing-from-raw-html - Internal links missing from raw HTML (JS-only): https://seogard.io/en/docs/rules/internal-links-missing-from-raw-html - JSON-LD missing from raw HTML (JS-only): https://seogard.io/en/docs/rules/json-ld-missing-from-raw-html - JS-injected images without alt: https://seogard.io/en/docs/rules/image-alt-missing-from-raw-html - Semantic tags missing from raw HTML: https://seogard.io/en/docs/rules/semantic-tags-missing-from-raw-html - Missing favicon: https://seogard.io/en/docs/rules/missing-favicon - Semantic structure: https://seogard.io/en/docs/rules/semantic-html-structure - Missing structured data: https://seogard.io/en/docs/rules/missing-structured-data - Missing Open Graph: https://seogard.io/en/docs/rules/missing-open-graph-tags - Too few internal links: https://seogard.io/en/docs/rules/too-few-internal-links - Missing llms.txt: https://seogard.io/en/docs/rules/missing-llms-txt - AI citation crawlers blocked (robots.txt): https://seogard.io/en/docs/rules/ai-crawlers-blocked-robots-txt - Incomplete structured data: https://seogard.io/en/docs/rules/incomplete-structured-data - Missing FAQ schema: https://seogard.io/en/docs/rules/missing-faq-schema - Weak citation signals: https://seogard.io/en/docs/rules/weak-citation-signals - Content structure (GEO): https://seogard.io/en/docs/rules/geo-content-structure - Page weight increase: https://seogard.io/en/docs/rules/page-weight-increase - Heavy page: https://seogard.io/en/docs/rules/heavy-page ## Links - GitHub: https://github.com/seogard-software/seogard - Short version: https://seogard.io/llms.txt ## Legal information - **Publisher**: SAVEPNP, SAS with a capital of EUR 1,000 - **RCS**: Créteil 912 784 030 — SIRET 912 784 030 00021 - **VAT**: FR04912784030 - **Head office**: 25 rue Camille Blanc, 94400 Vitry-sur-Seine, France - **Director**: Aadil TALBI - **B2B service only**: for professionals only - **Terms (French)**: https://seogard.io/fr/legal/cgu - **Sales terms (French)**: https://seogard.io/fr/legal/cgv - **Privacy (French)**: https://seogard.io/fr/legal/privacy - **Contact**: legal@seogard.io