Permalink Tester

Render sample posts through a WordPress permalink structure and read the URLs before you commit to them.

Runs on your deviceWordPressWorkingNo account needed

What this tool does

Permalink Tester takes a handful of sample posts and renders each one through a permalink structure, so the resulting URLs are on screen before you touch Settings → Permalinks on a site that already has readers. Choose one of the six built-in structures — plain, day and name, month and name, numeric, post name, or category and name — or type your own from the ten tags WordPress recognises: %year%, %monthnum%, %day%, %hour%, %minute%, %second%, %post_id%, %postname%, %category% and %author%. Anything else stops the run with an error naming the ten that work.

Under the table of URLs it lists the archive paths the same settings produce — category, tag, author and date — and then a short list of caveats specific to the structure you picked. A custom structure carrying neither %postname% nor %post_id% is called out because two posts published the same day would collide and WordPress will refuse to save it. A structure that opens with %postname%, %category% or %author% is called out because it makes WordPress build verbose rewrite rules, which are slower and can clash with page URLs at the same path. A structure that starts with your own category base is called out because category archives break. A missing trailing slash gets a line, hour, minute and second tags share one, and if the longest URL in the batch passes 100 characters that single length is reported.

Nothing here talks to a WordPress install, and that limit shapes what the output is worth. The site address is only a prefix for the sample URLs — no request is made to it — no rewrite rules are generated or tested, and the post IDs are invented, taken from the line you typed or counted up from the First post ID setting. The slugs come from this tool's own approximation of sanitize_title: accents are folded, curly quotes dropped, and ampersands, em dashes and HTML entities collapse away, but characters outside the Latin alphabet are discarded rather than percent-encoded, so a Cyrillic or Japanese title comes out as a post-118 style placeholder here when a real install would keep the words. It also has no idea which slugs are already taken, so the -2 and -3 suffixes WordPress appends to duplicates never show up. The work happens in this browser tab, and the titles you paste are not uploaded.

How to use it

  1. List a few sample posts. One per line, and a title on its own is enough. Add Title | 2026-03-04 | food/baking | jane | 118 to pin the date, category, author and ID for that line. Lines starting with # are skipped.
  2. Pick the permalink structure. One of the six presets, or Custom structure to type your own. A custom structure missing its leading slash gets one added, with a note saying so.
  3. Set the defaults and the bases. Default publish date, category, author and First post ID fill in whatever a post line leaves out. Category base and tag base set the front of the archive examples, though the term shown after each base is a fixed sample rather than one of your own. The category base is also checked against your structure for a collision.
  4. Read the table, then the notes. Each sample title appears beside the URL it would get, followed by the category, tag, author and date archive paths, and the caveats that apply to this structure.

Processing & privacy

Runs on your device. Your file is processed directly in this browser.

Common use cases

Deciding on a structure for a new site

Before anything is published, permalinks are free to change. Comparing post name against day and name using your own titles is more informative than reading the descriptions in the admin.

Vetting a custom structure before saving it

A structure that WordPress silently refuses, or one that forces verbose rewrite rules, is easier to spot here than after the save button has changed every URL on the site.

Spotting a category base clash

Setting the structure to /category/%postname%/ while the category base is still category breaks category archives. The clash is reported as a problem rather than left to be discovered in production.

Judging URL length before a migration

Deeply nested categories plus a date prefix produce long paths. The longest URL in the batch is reported once it passes 100 characters, which is the moment to reconsider the shape.

Questions

Does this change my WordPress site?
No. It makes no connection to any site, reads no database and writes no rewrite rules. The site address you enter is used only to build the front of the sample URLs, so the output is a preview and nothing more.
Why does my real site produce a different slug?
Two known reasons. Non-Latin characters are dropped here instead of being percent-encoded, so titles in scripts other than the Latin alphabet fall back to post-ID. And WordPress appends -2 to a slug already in use, which this tool cannot know about because it never sees your existing posts.
Which structure should I choose?
Post name suits most sites, and day and name suits anything where the publication date is part of the story. Plain permalinks work everywhere but read badly and carry no keywords, which is why the tool flags them. Post name and category and name both trigger the verbose rewrite rules note — that is a real cost, not a reason on its own to avoid them.
What happens to my old URLs if I switch?
Every published post moves to a new address, and old links stop resolving unless you redirect them. The tool says this on every run but cannot do it for you — set up the redirects from the old paths first, then change the setting.
Can I use tags like %post_tag% or a custom taxonomy?
No, because WordPress does not support them in a permalink structure either. The ten tags it accepts are the ten listed in the output, and typing anything else here produces an error rather than a URL that would never work.
Is my input sent anywhere?
No. Parsing the post lines and building the URLs happens in this browser tab, so the titles, categories and author names you type stay here. The tool keeps working with the network disconnected.

Related tools