Permalink Tester
Render sample posts through a WordPress permalink structure and read the URLs before you commit to them.
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
- 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.
- 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.
- 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.
- 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?
Why does my real site produce a different slug?
Which structure should I choose?
What happens to my old URLs if I switch?
Can I use tags like %post_tag% or a custom taxonomy?
Is my input sent anywhere?
Related tools
- Meta Tag Preview — See how your title and description look in search results.
- Salt Key Generator — Produce a new set of WordPress authentication salts.
- wp-config Generator — Generate a wp-config.php with fresh security salts.
- .htaccess Generator — Build common Apache rules for WordPress.
- Serialized Data Fixer — Repair PHP serialized strings broken by search-replace.
- Shortcode Builder — Assemble shortcodes with attributes correctly quoted.