documentation

everything the tool does, in the order you meet it — and what to do when a run comes back looking wrong.

starting a run

Silentfrog needs two urls: the site you are leaving and the site you are moving to. A Webflow staging domain (your-site.webflow.io) works as the new site — it is an ordinary crawl of server-rendered html. Then generate redirect map, and both sites are crawled one after the other before anything is matched.

start a crawl

extra old-site urls the crawl might not reach — one per line, or a csv export with the url in the first column (crawler export, search console, server logs). paths like /blog/post work too.

free up to 50 pages per site

the crawl form with the old site url, the new site url, the page cap, the sitemap option and the field for your own url list.

The crawler starts at the url you gave and follows links, which on its own would miss every page nothing links to any more — old blog posts, discontinued products, campaign landing pages. Those are exactly the urls that still hold rankings, so two more sources are read:

robots.txt and sitemap.xml (the checkbox, on by default) for both sites. Sitemap indexes are followed and .xml.gz files are unpacked.

your own url list — add url list opens a field you can paste into or load a file into. One url per line, or a csv with the url in the first column: a crawler export, a Search Console export, server logs. Bare paths like /blog/post work too.

max pages per site is your own brake, per site rather than for the run. Hosted here, a crawl stops at 2 000 pages per site in any case, because every batch has to finish inside a request. On your own machine that ceiling is lifted (see below).

While it runs you see how many pages have been fetched, how many are still queued and how many seed urls the sitemaps added. Nothing is lost if you leave the tab open and go make coffee — the whole crawl is driven from your browser.

crawling

crawling old site…

old site (https://acme-werkzeuge.de)6 crawled · 2 queued

+ 1 seed urls from 1 sitemap

new site (https://acme-relaunch.webflow.io)0 crawled · 0 queued

the progress panel: pages crawled and queued for each site, and how many extra seed urls the sitemaps added.

when the old site is gone

Often the domain is switched over before anybody thinks about redirects: there is nothing left to crawl. Click old site already offline? under the two url fields and the old site’s pages come from a file instead. Only the new site is then crawled.

old site already offline

the old site is not crawled — its pages come from this list. upload the old sitemap.xml (several files at once are fine), a crawler or search console export, or paste the urls. paths like /blog/post work once the old domain is filled in above.

5 urls · https://acme-werkzeuge.de

a url list has no titles or headings, so matching runs on the url alone — expect more rows in the review bucket.

free up to 50 pages per site

the crawl form in offline mode: the old site field is empty, the uploaded sitemap.xml sits in the list field, and below it the tool reports how many urls it read and which domain it derived.

What you can hand it:

the old sitemap.xml — the one you saved, exported from the old cms, or pulled out of the Wayback Machine. Several files at once are fine when the sitemap was split into many. Language variants that appear only as an hreflang alternate (<xhtml:link rel="alternate">) are read as well, because they need a redirect just the same.

a url list — a crawler or Search Console export, a server log, or urls pasted straight into the field.

The old site field can stay empty: the domain is taken from the urls in the file. Fill it in only when your list holds bare paths (/kontakt) with no domain to resolve them against. Urls from a different domain are ignored and counted, so a stray entry cannot quietly widen the map.

What it costs you. A url list carries no titles and no headlines, so matching runs on the url alone — the missing signals shift their weight onto the slug. Expect more rows in needs review and read them rather than trusting them. If the old site is still reachable, crawling it gives a noticeably better map.

If you upload a sitemap index — a file that only points at other sitemap files — the tool says so instead of guessing: those files cannot be fetched from a site that no longer answers, so upload them yourself.

how matching works

Only pages that answered with status 200 take part on either side. Urls are compared in a normalized form: lowercase path, no trailing slash, no query string, index.html removed, www. ignored. A page that declares a canonical url on the same site is matched as that canonical.

Identical paths pair up first and get confidence 100 % — that is the exact bucket. The homepage always maps to the homepage.

Everything left over is scored against every page of the new site on three signals: the slug (weight 0.5), the title (0.3) and the h1 (0.2). When a signal is missing on either side its weight moves to the slug, which is why a bare url list still produces a usable map. A repeated title suffix like | brand is detected across the site and ignored, so titles compare on their page-specific part. A target that another row already claimed is scored slightly lower, which spreads rows out instead of piling them onto one popular page.

The score then decides the bucket:

exact — same path — nothing to check.

fuzzy — 85 % and up. Confident enough to export without being asked.

needs review — 60 % to 85 %. Probably right, sometimes not — these are the rows worth your afternoon.

unmatched — below 60 %. No target was good enough; give it one yourself or let it go.

working through the table

The table opens with the worst confidence first, so what needs attention is on top. The tabs above it filter by bucket, and the search box filters by old path, target path or page title — the two combine, which is the fastest way to find one specific link among a few hundred rows.

results

8 pages · 2 exact · 3 fuzzy · 1 need review · 1 unmatched · 2 verified

✓Match
/kampagne/sommer-2023Sommeraktion 2023 — 20 % auf alle Zangenunmatched94031%200
/produkte/seitenschneiderSeitenschneider 160 mmreview61272%200
/blog/relaunch-checklisteDie Relaunch-Checklistefuzzy42188%200
/blog/ladezeitLadezeit verbessernfuzzy14391%200
/blog/301-vs-302301 oder 302?fuzzy30592%200
/ueber-unsÜber unsmanual188100%200
/produkte/kombizangeKombizange 180 mmexact274100%200
/kontaktKontaktexact96100%200

the results table: old paths on the left, matched new paths on the right, each row badged exact, fuzzy, needs review, manual or unmatched, sorted worst confidence first.

Re-map a row by clicking its target path: a searchable picker over every path of the new site opens, and you can also remove a mapping entirely. Manual picks are marked manual and count as confirmed.

Verify rows with the checkbox, or use verify n shown to confirm everything the current filter and search leave visible in one click. This matters for the Webflow export: a needs-review row is only exported once it is verified.

Sort by path, confidence, status or clicks by clicking the column header.

Undo steps back through every change one at a time — a row edit, a bulk verify and a directory rule all undo the same way. reset all edits throws away everything you did and goes back to the untouched crawl result.

whole directories at once

Most relaunches move whole sections. Pick an old directory (/blog) and a target on the new site (/magazin), and keep sub-paths maps /blog/post → /magazin/post for every page below it. all to one page sends the entire directory to a single target instead.

A live preview shows how many pages the rule hits and which of the resulting targets do not exist on the new site. Those land in needs review rather than being exported silently — a redirect to a 404 is worse than no redirect.

redirect a directory

redirect a whole directory

map every crawled page below a directory at once — optionally as a single webflow wildcard rule that also covers urls the crawl missed.

→

3 pages · 3 targets exist on the new site · + wildcard /blog/(.*) → /magazin/%1

  • /blog/relaunch-checkliste → /magazin/relaunch-checkliste
  • /blog/301-vs-302 → /magazin/301-vs-302
  • /blog/ladezeit → /magazin/ladezeit

the directory rule form mapping /blog to /magazin with sub-paths kept, exported as a wildcard, and a live preview of how many pages it affects.

export as wildcard rule writes the whole thing as one Webflow row (/blog/(.*) → /magazin/%1, Webflow’s own wildcard notation). That single row also covers urls the crawl never found, and the individual rows it covers are left out of the Webflow csv so the file stays short.

traffic data

Without it every row looks equally important, when in reality a handful of urls carry the rankings. Import a Search Console page export — or any csv with a url column and a number column — and the table gains a clicks column to sort by. English and German exports, comma- or semicolon-separated, are all recognized.

Urls that get traffic but were never found by the crawl are listed separately, and you can add them as unmatched rows in one click. Those are the pages a relaunch quietly loses: nothing links to them any more, but Google still sends people there.

traffic import

traffic data

import a search console page export (or any csv with a url column and a number column) to see which redirects actually matter — the table gets a clicks column you can sort by.

10 urls imported · 8 matched onto crawled pages

2 urls get traffic but were not found by the crawl — they still need a redirect.

  • /blog/werkstatt-tipps · 587 clicks
  • /produkte/wasserpumpenzange · 233 clicks

the traffic import panel after a search console export was read: how many rows were joined onto matches, and the list of urls that have clicks but were never found by the crawl.

the two downloads

csv (generic) — source_url, target_url, status_code, match_type, confidence, verified with absolute urls, plus clicks, impressions once traffic data is imported. Unmatched rows are included with an empty target, so the file doubles as an audit report of what was decided and how sure the tool was.

the redirects file — the finished list, in the spelling of the importer you pick: Webflow (fromUrl, toUrl, ready for site settings → publishing → 301 redirects and for the Data API), Shopify, the WordPress plugins Redirection, Yoast SEO Premium and Rank Math PRO, Squarespace url mappings, Apache .htaccess, an nginx map file, or plain from, to pairs for Wix, HubSpot and anything else. The picker changes the header, the delimiter and how a directory rule is written — never which rows are in the file. Three kinds of rows are deliberately left out of all of them: rows that point at themselves, rows that are still unmatched, and needs-review rows you have not verified. A redirect you were not sure about is worse than none.

A directory rule ticked export as wildcard rule becomes one line where the importer can express that — /blog/(.*) → /magazin/%1 for Webflow, a regex row for the WordPress plugins, /blog/[name] for Squarespace, RedirectMatch for Apache — and the rows it covers are dropped. Shopify and the plain pairs have no wildcards, so there the covered rows are written out one by one instead, and nothing the crawl found is lost.

export

site settings → publishing → 301 redirects, or the data api

the two export buttons — webflow csv and generic csv — next to the option that includes needs-review matches.

saving and coming back

Reviewing a few hundred rows is real work, so every change is autosaved in your browser and restored the next time you open the tool. It never leaves your machine.

save file writes the whole session — results, edits, rules, traffic data — as one json file, to carry to another machine or keep as a snapshot. load file reads it back, discard throws the session away and clears the autosave.

plans and unlocking

Priced per relaunch, not per month: a site gets relaunched every few years, so a subscription would fit nobody. Only the old site’s pages count — that is what decides how long your redirect list gets. Crawling the new site comes along inside the same allowance.

free — up to 50 pages · free

medium — up to 150 pages · 46 €

unlimited — no page limit · 150 €

lifetime — 249 € · the desktop app only, and the one key that is not bound to a single project — it covers every relaunch you will ever open in it.

You do not decide up front. Start free; when the allowance stops a crawl, Silentfrog estimates how big the old site really is and names the plan that fits, with the number in front of you. A key is redeemed once and is then bound to the two domains of that project, which is what makes one purchase cover one relaunch. Unlock, run the crawl again, and the pages that were skipped are picked up.

There are no accounts. The unlock lives in your browser, and Polar — who handles the payment as merchant of record — is the record of who bought what.

running it on your own machine

A browser may not read another site’s html, so hosted here the fetching happens on our servers in Frankfurt. Everything else — the matching, your edits, the csv files — never leaves your browser.

The desktop app moves the fetching onto your own machine as well. That is the answer to the two situations the hosted version cannot help with: staging behind a login or an ip allowlist, and a site that only exists on your intranet or on localhost. It also has no page cap from us, since nothing is counted on a server, and it is free for the first 50 pages exactly like the browser version.

when something looks wrong

crawl returned no pages — The url could not be reached, or the site refuses our crawler. Check that it answers publicly — staging behind a login needs the desktop app.

far fewer pages than expected — The crawler reads server-rendered html only. On a purely client-side rendered site the links stay invisible: turn on sitemap reading, paste a url list, or hand it the sitemap directly.

the page limit ended the crawl early — Your max pages per site was reached and urls were left in the queue. Raise it and run again.

everything landed in needs review — Usually a url list without titles, or two sites whose slugs have nothing in common. Directory rules are the fast way through: one rule can settle a few hundred rows.

the webflow csv is shorter than the table — By design — identity rows, unmatched rows and unverified review rows stay out, and a wildcard rule replaces all the rows it covers. Verify the review rows you want and they will be in the next download.

Anything else: hi@silentfrog.dev.

open the tool · guides · what is processed