Turns an old-URL list and the mappings you have into a redirect map as JSON - one rule per old URL, chains collapsed to the final target, loops reported and never emitted, queries and percent-encoding kept as written, and old URLs with no named target listed as unmapped instead of guessed. Also writes the same map as a Cloudflare Pages style _redirects file. Knows the status codes (301 for a moved page, 308 where the method must be kept and what Next.js really sends for permanent true) and the cache trap, where a redirect added over a cached 404 keeps serving a 308 with no Location until the path is purged. Use when asked to plan or write redirects for a site migration, a redesign, a URL rename or a domain change, or to check a redirect list for chains and loops.
Redirect Map Builder is a tested SKILL.md that turns an old-URL list and the mappings you have into a redirect map as JSON - one rule per old URL, chains collapsed to the final target, loops reported and never emitted, queries and percent-encoding kept as written, and old URLs with no named target listed as unmapped instead of guessed; an agent buys it once for $0.01 over x402.
Not for
It does not crawl your site, test live redirects, edit server config or decide which new page replaces an old one: it maps only what you state and lists the rest as unmapped. It cannot see whether your host holds a cached 404; it warns when you say the path answered 404 before. Cache fact owner-measured in 2026, not re-checked.
Tested, honestly
Tested 2026-10-08 with a strong and a weak model.
With and without the skill
Results with and without the skill, for Sonnet and Haiku |
| with | without | with | without |
|---|
| Redirect maps right on every check (24 cases) |
| Redirect maps right on every check (24 cases) | 24/24 | 24/24 | 23/24 | 24/24 |
|---|
The same request on both sides; a fence around the answer is removed first. No gain on these cases for either model: Sonnet and Haiku both got 24 of 24 without the skill, including the unmapped, loop, 308 and cache-note cases. With the skill Haiku got 23 of 24 (one old URL dropped from the lists, a slip it did not make alone). The skill is a format and consistency aid here, not a measured gain, so the price is the lowest.
Same cases and the same checks with and without the skill. The cases are ours, written around what the skill is for; with a handful of cases, a difference of one or two is within noise.
- SonnetStrong model, claude-sonnet-5-5
- Right on all 24 cases, read by hand: chains went straight to the final target and were listed under collapsed, both loops were reported with no rule for any member, old URLs with no named target stayed unmapped instead of being matched to a similar page or the home page, queries and percent-encoding were kept as written, Next.js permanent redirects and POST endpoints got 308, and both cache cases carried a note to purge or revalidate the path. The two _redirects files matched line for line.
- HaikuWeak model, claude-haiku-5-5
- Right on 23 of 24 with the skill, but it missed one old URL: in the case with four old URLs and two unmapped, it listed only /old/news under unmapped and left /old/recipe-3 out of every list. The same case was right without the skill, so this looks like a slip, not something the skill text caused. All chains, loops, status codes and cache notes were right.
Full test summary
Example
Our own test text, before and after the skill ran. Excerpts only.
English · claude-sonnet-5-5
Before
Site: one host, so the old and the new URLs are paths on it. Write paths only.
Old URLs to map:
/blog/old-post
/articles/old-post
/blog/team
Mappings given (old -> new):
/blog/old-post -> /articles/old-post
/articles/old-post -> /articles/new-post
/blog/team -> /about/team
Pages that are live on the new site: /articles/new-post, /about/team
After
{"rules": [{"from": "/blog/old-post", "to": "/articles/new-post", "status": 301}, {"from": "/articles/old-post", "to": "/articles/new-post", "status": 301}, {"from": "/blog/team", "to": "/about/team", "status": 301}], "unmapped": [], "collapsed": [{"from": "/blog/old-post", "via": "/articles/old-post", "to": "/articles/new-post"}], "loops": [], "notes": []}
What is in the file
- The answer
- Rules
- Work in this order
- Short examples
Languages
Any language. Tried in: English.
License
Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing. Holder: Georgi Kalchev, aiskills402.com. Full terms.
Versions
Current version 1.0.0, updated 2026-10-08. Whoever bought an earlier version gets new ones free through the same re-download token.
v1.0.0 · 2026-10-08
First release: builds a redirect map from old URLs, given mappings and live pages, as JSON (rules, unmapped, collapsed, loops, notes) or as a _redirects file. One rule per old URL, chains collapsed to the final target, loops reported and never emitted, queries and percent-encoding kept as written, no guessed targets, 301 for moved pages, 308 where the method must be kept and for Next.js permanent redirects, and a note to purge or revalidate a path that answered 404 before the redirect was added.
Facts re-checked on 2026-10-08 by fetching the vendors' pages: Google's site-move documentation (chains: up to 10 hops followed, go straight to the final destination; do not send many old URLs to the home page, soft 404; keep redirects at least a year), Google's redirects page (301 and 308 permanent, 302, 303, 307 temporary), the Next.js redirects reference (permanent true is 308, false is 307; query values pass through). The cache trap is owner-measured, not re-checked today.
Test: 24 cases, control passes with zero model calls. Model results and the price decision are added after the baseline run.
Test result (2026-10-08): 24 cases, Sonnet 24/24 with and without the skill, Haiku 23/24 with and 24/24 without. No measured gain, so the price is $0.01.
FAQ
What comes back for my list of old and new URLs?
One JSON object with the rules to deploy (from, to, status), the old URLs that have no named target, the chains it shortened, the loops it found and short notes for whoever deploys. There is no sentence around it, so your agent can parse it as it is. Ask for a _redirects file instead and you get that file only, one line per redirect. Each distinct old URL gets its own rule, with the query exactly as written, and percent-encoded paths are kept byte for byte on the old side, so tracking links and non-Latin addresses still match what visitors request.
What does it do when an old page has no new page?
It lists the old URL as unmapped and writes no rule. It does not pick the new page with the closest name and it does not send the visitor to the home page. A guessed permanent redirect stays in Google's memory, and many old URLs sent to one unrelated page can be treated as soft 404 errors. Two different targets for the same old URL are treated the same way: no rule, a warning, and the decision stays with you.
How does it handle chains and loops?
If one old URL goes to another old URL that goes on, both rules point at the final target and the shortened one is listed under collapsed. If URLs lead back to each other, the cycle is listed under loops and none of its URLs gets a rule, because a person has to decide where it should end. It writes 301 for a moved page and 308 where the request method and body must be kept, such as an API called with POST, or a Next.js config with permanent true, because that is what the framework sends. Temporary codes are never chosen for a move you do not plan to undo.
Does it help Claude Sonnet?
No gain showed on our 24 test lists. Sonnet and Haiku each got all 24 right alone, loops, unmapped lists, 308 and cache notes included, and with the skill Haiku slipped once. What you buy is a fixed format plus written rules for those traps, so agents behave the same every time. That is why the price is low.