Skip to content

Find out the day your SEO broke, not the month after

A staging noindex that shipped. A Disallow: / somebody pasted. A sitemap that quietly started 404ing. Nothing on your site reports any of it. SEOtto checks, keeps every version, and tells you the day it changes.

Check one page right now — no account:

Monitoring a whole site is free for one site. Start free

Loading a worked example

Read every crawl

robots.txt
sitemap.xml
<title>
<h1>
rel="canonical"
X-Robots-Tag

Traffic does not fall off a cliff. Something moves, and nothing tells you.

Every one of these is a normal Tuesday deploy. All of them answer 200 — the page still renders, the CMS still says published, and analytics only shows the shape of it three weeks later.

Tuesday's deploy

Analytics shows it, three weeks later

A traffic line that is flat until a deploy, then declines slowly. SEOtto raises an alert in the hour of the deploy; the decline is visible in analytics about three weeks later.

The environment flag reaches the template

Staging sets noindex. A build promotes the wrong config. Forty pages leave the index over the following week, and view-source on production looks fine because the directive arrived in a response header.

  • Meta robots and the response header, read together
  • Critical the moment a page stops being indexable

GET /collections/outerwear

critical
HTTP/2 200
content-type: text/html; charset=utf-8
cache-control: public, max-age=300
x-robots-tag: noindex

Somebody edits robots.txt

In WordPress it is a checkbox labelled “Discourage search engines”. It writes Disallow: / and closes the whole site. The page still loads for you, because you are not a crawler.

  • Every version kept, diffed line by line
  • Read as Googlebot reads it, longest match first

robots.txt

changed 07:12
User-agent: *
Disallow: /admin
Sitemap: https://harbor-retail.com/sitemap.xml

The sitemap generator times out

It answers 200 with nothing in it, or 404s entirely. New pages stop being discovered. There is no error anywhere, because from the server's point of view nothing failed.

  • URL count compared with the last crawl
  • Indexes and gzipped sitemaps followed

sitemap.xml

200 OK

No URLs in the sitemap — it listed 415 yesterday, and still answers 200.

A redesign rewrites the head

Titles get shorter, H1s become styled divs, canonicals all point at the home page. Each change is defensible on its own; together they are a rankings drop that takes a month to show up.

  • Title, description, H1 and canonical on every page
  • One alert per crawl, however many pages moved

first crawl after the redesign

  • <title>rewritten38 pages
  • <h1>missing12 pages
  • rel="canonical"points at /27 pages

A change is a fact. Whether it was a mistake is a separate question.

Which is why a diff here is not coloured red and green. Red would deliver a verdict before anything had decided one.

  • Every version of every tracked signal, kept for the life of the site
  • Purple, struck through is what it was; blue is what it is
  • Red and amber mean severity, and nothing else

/pricing

Before

Pricing — plans from $19 | Harbor Retail

change

A change and nothing else. The new title is fine, so no issue opened and nobody was paged — but it is on the record for the day somebody asks.

Three things happen, on a schedule

There is no plugin, no script tag and no analytics account to connect. Everything SEOtto reads is what any visitor can read.

01fetch

It reads the site the way a crawler does

robots.txt first, then the sitemap — following a sitemap index and un-gzipping where needed — and falling back to a walk of internal links when there is no usable sitemap. That fallback is reported, not hidden.

02record

It records the state of every page

Status, redirect chain, indexability from both the markup and the headers, title, description, H1s, canonical, Open Graph, structured data, word count and link counts. The first crawl is the baseline, and is silent.

03compare

It compares, judges, and only then tells you

Differences become changes — facts, kept forever. Rules turn the current state into issues, which open and close. A message goes out on the edge, never on the twentieth crawl that found the same thing.

Fifty client sites, one screen, worst first

The overview sorts by health and never by name. An agency opens it once a morning, and the answer has to be in the first row rather than behind a filter.

  • A separate alert channel per client, each with its own severity floor
  • A light, print-clean report per site, because it is going into a client deck
  • No per-seat pricing — the number that scales is sites

Overview

worst first
  • Verity Legal

    verity-legal.example

    52

  • Ridgeline SaaS

    ridgeline.example

    59

  • Pellet & Fern

    pelletandfern.example

    59

  • Harbor Retail

    harbor-retail.example

    97

One site free, for good

Because a monitor you have to pay for before you trust it is a monitor nobody trusts. Paid plans buy frequency, pages and history; every plan runs every check.

Free

One site, checked every day.

$0forever

  • 1 site, 25 pages
  • Daily crawl
  • Email alerts
  • 14 days of page snapshots
  • Every check in the catalog

Pro

For one site you cannot afford to lose.

$19per month

  • 10 sites, 500 pages each
  • Hourly crawl
  • Email, Slack and webhook alerts
  • 180 days of page snapshots
  • Per-site alert routing

Agency

For a roster you answer for.

$79per month

  • 100 sites, 2,000 pages each
  • Hourly crawl
  • A separate alert channel per client
  • 2 years of page snapshots

Questions people actually ask

Add one site. Find out what it has been doing without you.