To/Pricing
people 6 · search 3 · AI 0
Forward to /pricing/Same page · a capital letter
For AI agents: this page as Markdown; every page and guide as Markdown is listed in llms.txt.
AI analytics
AI traffic analyticsTraining crawls, live fetches and click-throughs, kept apart. AI visibility trackingOne page traced: named, read, sent a visitor, became a lead. AI crawlersGPTBot, ClaudeBot and more, checked against their owners' addresses. ChatGPT trafficWhat ChatGPT read, and the people it sent you.Analytics and proof
Server log analyticsHow it works: every log line in one of five groups. Lead attributionEvery page a lead read, joined from signed webhooks. Security from your logWho probes your site, and what applies to your stack. All featuresEvery report, alert, export and setting, in one place. Every feature →By role
AgenciesBranded client report PDFs, up to 25 sites on one plan. SaaS foundersWhich pages AI reads before someone signs up. SEO teamsSearch Console and Bing beside real visits and crawl health. DevelopersOne command, a read-only API and an MCP server. Small businessOne site, one dashboard, nothing to set up in your pages.By set-up
NginxRead the access log your server already writes. ApacheThe same five groups from the Apache log. CloudflareA Worker, when you have no server access. VercelA log drain, no change to your site's code. Self-hostThe Docker image. Your data stays on your server. IntegrationsSearch Console, Slack, webhooks, API and MCP. Every solution →Web analytics
Skald vs Google AnalyticsWhat GA4 counts, and the traffic it never sees. Skald vs PlausibleA script tag beside the whole server log. Skald vs MatomoBoth self-host; one reads the log. Skald vs PostHogProduct analytics beside log analytics. Skald vs GoAccessTwo log readers, two different jobs.AI and search
Skald vs Known AgentsNaming AI agents, and proving which are real. Skald vs Cloudflare analyticsEdge counts beside a sorted log. Skald and Search ConsoleQueries and rank beside real visits. Prompt tracking vs logsWhy a sampled answer is not a visit. Every comparison →Honest limits
Skald does not replace Search Console for queries and rank, or GA4 for ad spend. It sits beside them and shows what they can't see.
Every comparisonLearn
InsightsNotes on server logs, AI crawlers and AI referrals. The AI traffic guideSee ChatGPT, Claude and Perplexity in your own data. What is GEO?Generative engine optimisation, in plain words. How it worksFrom one log line to five groups.Build and check
Docs and set-upOne command, the script tag, Claude Code, adding a site. What's newEvery release, in plain words. Live demoThe real dashboard with sample data, no sign-up. Our storyWhy a small-business site needed this. All resources →Free check
Who is probing your site? See what your home page shows the world, in 10 seconds.
Run the free checkFeatures · lost pages
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
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
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
index.html, a copy -2, a broken link, the same slug (the last part of the address) in another sectionSame topic /guides/webhooks
2 words in common with this page's address
location = /guides/webhook-setup/ { return 301 /guides/webhooks; }
/ /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
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.
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.
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.
| Asked for | Who | Listed as |
|---|---|---|
/blog/old-launch-post | people 2, search 1 | Lost page |
/Pricing | people 1 | Lost page |
/guides/webhooks.md | AI 2 (live fetches) | AI asks for Markdown, page is live |
/blog/old-launch-post.md | AI 1 (a crawler) | AI asks for Markdown, an old page's copy |
/sitemap_index.xml | search 2 | A sitemap to-do |
/.env | a scanner 4 | Left out: a scanner probe |
/wp-login.php | a scanner 3 | Left out: a scanner probe |
/assets/old-site.css | people 5 | Left out: a file, not a page |
/feed/ | a feed reader 6 | Left out: a feed |
/old-pricing/ | an SEO crawler 2 | Left 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
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.
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
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.
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
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
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.
keep reading
questions
Straight answers, including what Skald does not do.
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.
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.
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.
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.
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.
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
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.