Skip to content

For AI agents: this page as Markdown; every page and guide as Markdown is listed in llms.txt.

New storyWe built Skald to count visitors. It saw an AI-key thief at work.
SkaldEvery visit, truly told.

Features · lost pages

The old URLs people, Google and AI still ask for

Pages you moved or deleted months ago are still being asked for, and every ask ends on a 'not found'. Skald lists each one from your server log, finds the closest live page, and writes the 404 redirects for you to paste into nginx or Apache.

Old addresses still asked for is the list at the top of Site › Not found: page addresses that answered 404 or 410 to people, a search engine or an AI fetcher in the last 30 days and are not live now, most asked first. Scanner probes are left out.

30-day free trial · no card · we set it up within one working day · free to self-host

Old addresses still asked for · sample site · 30 days

To/Pricing

people 6 · search 3 · AI 0

Forward to /pricing/Same page · a capital letter

To/guides/webhook-setup/

people 4 · search 9 · AI 2

Forward to /guides/webhooksSame topic · 2 words in common

To/blog/old-launch-post

people 3 · search 5 · AI 1

Forward to /blog/Loose · check it first

To/guides/api-v1

people 0 · search 14 · AI 3

410 goneNo good match

location = /Pricing { return 301 /pricing/; }

Sample site. Each old address gets the closest live page Skald found and how close it is, or "410 gone" when nothing is close. Below, the nginx line you would paste.

[01] where should it go

Find the closest live page for each old URL

Picking a redirect target by hand for a hundred dead URLs takes an afternoon. Skald tries a fixed list of checks, in order, against the pages that are live now, and says in one word how sure it is.

type or tap one

  1. It is live already
  2. The same page written another way: a capital, a slash, index.html, a copy -2, a broken link, the same slug (the last part of the address) in another section
  3. A later page of a live list
  4. Most of its words are one live page's (two at least, or all of the shorter address's)
  5. A live page of the same section
  6. Nothing close
0.62

Same topic /guides/webhooks

2 words in common with this page's address

location = /guides/webhook-setup/ { return 301 /guides/webhooks; }

The sample site's 16 live pages

/ /pricing/ /features/ /blog/ /blog/server-logs-vs-tags /blog/ai-crawlers-explained /blog/fall-launch /blog/pricing-for-small-teams /guides/getting-started /guides/webhooks /guides/team-roles /customers/ /about/ /contact/ /book-a-demo/ /signup/

Live means in the sitemap Skald keeps, or served as a page on or after the last day the old address failed.

The checks run in your browser, written from Skald's own matcher (closest_page.py) with the same thresholds: Dice's coefficient, a measure of how many words two addresses share, must reach 0.62.

[02] the line to paste

A 301 or a 410, written for nginx or Apache

Each lost page gets the line your server needs: a 301 to the closest live page, or 410 gone. You add it; Skald changes nothing on your server.

switch server

A 301 says the page "has been assigned a new permanent URI"; a 410 says it is "no longer available" and that "this condition is likely to be permanent" (RFC 9110, HTTP Semantics, sections 15.4.2 and 15.5.11, read 25 Oct 2026). Where a redirect is suggested, the 410 line sits under it, so you choose.

An address with characters a server line cannot take as they are, like a pasted Markdown link, gets no line: write that one by hand.

redirects-nginx.conf

Sample file, written the way Site › Not found's Download the lines writes it. The loose match is flagged: check it before you add it.

A sample day of 404 answers and whether Skald lists each
Asked forWhoListed as
/blog/old-launch-postpeople 2, search 1Lost page
/Pricingpeople 1Lost page
/guides/webhooks.mdAI 2 (live fetches)AI asks for Markdown, page is live
/blog/old-launch-post.mdAI 1 (a crawler)AI asks for Markdown, an old page's copy
/sitemap_index.xmlsearch 2A sitemap to-do
/.enva scanner 4Left out: a scanner probe
/wp-login.phpa scanner 3Left out: a scanner probe
/assets/old-site.csspeople 5Left out: a file, not a page
/feed/a feed reader 6Left out: a feed
/old-pricing/an SEO crawler 2Left out: only bots asked

Sample day of 404 answers. Search engines count as the search crawlers; AI counts assistants fetching for a question and AI crawlers.

[03] who counts

Old pages that real readers ask for, scanner noise left out

A raw 404 report mixes your old pages with scanners trying /.env and files nobody reads. Skald lists an address only when it is shaped like a page and people, a search engine or AI asked for it.

flip it

Bots and your own traffic do not count. Files, feeds, APIs and framework paths are no page whatever they answer. The .md copies go to their own tab, AI asks for Markdown, split by whether their page is live; AI readiness per page shows the same from AI's side.

On a real site the list can be long. On 25 Oct 2026, Skald's to-do list for docomatic.ai showed "Send old pages somewhere useful": 240 old page addresses answered "not found" from 11 to 24 Oct, and people asked for them 301 times, search engines 584 times and AI 337 times. Those are asks for page addresses only: scanner probes, files, feeds, APIs, Markdown copies, and asks by bots or your own team were left out.

[04] after the fix

Proof that the redirect took, day by day

A line pasted into the wrong server block fails without a word. Once its line is on the server, press Mark fixed: the address moves to After the fix, and every whole day after the mark is counted again.

pick one

After the fix shows, for each address, the not-found answers since the mark (people, search engines and AI), the times it was served as a page since, and today so far, apart. Zero not-found answers after the mark: Fixed.

/guides/webhook-setup/ marked fixed 18 Oct

Whole days since
7
Not found since
0
Served as a page since
0

Fixed

Sample address. A 301 answers neither 404 nor a page, so after a working redirect both counts stay at 0.

[05] before you trust it

Lost-page figures that a second count must match

Every address and every count on the list is counted again by separate code, straight from the stored days, with its own reading of what is a page. If the two disagree, the list is withheld and says why, rather than send you after the wrong URLs.

The list covers its own last 30 days with checked figures, ending yesterday, whatever date range the top bar shows. The same lost pages raise the "Send old pages somewhere useful" item in the to-do list once they reach 10 asks between them. Crawlers' view of your sitemap is on AI crawl health.

Where the suggestions stop

  • Skald reads addresses only, never your pages' words. A Same topic or Loose match can be wrong: read the target before you paste the line.
  • It writes lines for nginx and Apache. Other servers, CDNs and hosts with a redirects screen need the same rule typed their way.
  • It adds nothing to your server and tests nothing there; After the fix reads the log to see what happened.
  • Search engines are counted together: the 404 rows keep that a search crawler asked, not which one.
  • Mark fixed needs accounts (signing in); owners and admins mark. Without them the list shows and says why.

questions

404 redirects FAQ

Straight answers, including what Skald does not do.

Should an old page get a 301 redirect or a 410?

A 301 when a live page now covers what the old one did: people and crawlers land on it instead of a dead end. A 410 when nothing on the site replaces it: it says the page is gone on purpose. Skald suggests one per address and shows the 410 line under every suggested redirect, so you choose.

How does Skald pick the closest live page?

It reads addresses only. In order: the same page written another way (a capital letter, a trailing slash, index.html, a -2 copy, a broken link, the same slug (the last part of the address) moved to another section), a later page of a live list, a live page that shares most of its words, then a live page of the same section. It says how close in one word: Same page, Same topic or Loose; with nothing close it says No good match and suggests 410.

Why is /.env not on my list of lost pages?

Because nobody lost it. Scanner probes such as /.env and /wp-login.php, files, feeds and APIs, and addresses only bots asked for are left out. The list keeps page addresses that people, search engines or AI asked for.

Does Skald add the redirects to my server?

No. Skald gives the line to paste for nginx or Apache, one at a time or as one file with Download the lines. You or your developer add them; Skald changes nothing on your server.

How do I know a redirect worked?

Press Mark fixed on the address once its line is on the server. It moves to After the fix, where Skald counts the not-found answers to it on every whole day after the mark. Zero not-found answers after the mark: Fixed.

What about AI asking for .md copies of my pages?

They have their own tab, AI asks for Markdown: the .md addresses AI fetchers asked for and got 'not found', split by whether their page is live. One server rule that serves a Markdown copy, or redirects .md to the page, covers all of them.

$ tail -f access.log | skald

See what AI does with your site. Free for 30 days.

No card. We set up hosted Skald for you within one working day, or you self-host it free. Every line of your log, sorted and added up.

Start free trial Live demo