WordPress Plugins

Permalink Manager Pro Review: When WordPress URLs Need to Be Rebuilt

Permalink Manager Pro lets you customize every URL on a WordPress site, set different permastructures per post type, bulk-rewrite URLs, and ship 301s automatically.

Permalink Manager Pro Review: When WordPress URLs Need to Be Rebuilt review on GPL Times

There’s a particular client request I learned to fear in my first years building WordPress sites. It usually came over Slack on a Friday afternoon:

Quick question, can we change our blog URLs from /blog/post-title/ to /articles/post-title/? And we have like 2,000 old links from email campaigns that point at the old structure, those need to keep working.

WordPress’s native permalink settings are not built for this. You can change the global Settings → Permalinks structure but it applies to everything, can’t be scoped per post type, and breaks every existing inbound link with no redirects. You can write rewrite rules in functions.php but maintaining them across plugin updates is its own punishment. You can write 2,000 lines of .htaccess redirects, but try debugging that at 11pm.

This is exactly the problem Permalink Manager Pro is built for. It’s not a glamorous plugin: there’s no marketing landing page with hero animations. What it is is the one tool I’d grab on a sinking site if I had to keep URLs working through any migration, restructure, or strategy change. Let’s go through what it actually does, what it doesn’t, and where it earned its keep on real projects.

Pair it with a non-trivial site (lots of pages, multiple post types) so you can feel the difference; on a 3-page site, you can’t.

Table of Contents

WordPress core handles three things related to URLs: a global permalink structure setting, per-post slug editing, and a redirect on slug change. That’s it. Anything more involved (different URL patterns per post type, custom rewrite tags, bulk URL changes, automatic 301s for old URLs) you handle yourself.

Permalink Manager Pro replaces that DIY zone with a structured set of tools:

  • Per-post URI override: set a completely custom URL for any single post, regardless of the global structure
  • Permastructures: define different URL patterns per post type and taxonomy ("/recipes/{cuisine}/{recipe-slug}/" for recipes, "/articles/{year}/{post-slug}/" for blog posts, "/{product-cat}/{product-slug}/" for products)
  • Custom rewrite tags: use any post meta field, ACF field, taxonomy term, parent post, author meta, or computed value as a URL component
  • Bulk find & replace: search across all generated URIs and rewrite patterns globally
  • Bulk URI regenerator: re-apply permastructure rules across all posts after a structure change
  • 301 redirects: automatically created when you change a URI, manually managed in a separate Redirects panel
  • Extra redirects: arbitrary old URL → new URL mappings, useful for migrating from a different platform
  • Custom slugs per language: per-language URI overrides if you use WPML, Polylang, or TranslatePress
  • WooCommerce-aware: deep integration with product, category, attribute, and shop-base URL structures
  • Endpoint registration: define custom endpoints like /yourpost/print/ or /yourproduct/specs/

Everything stores in two WordPress options: permalink-manager-uris (the post→URI map) and permalink-manager-redirects (the old→new redirect map). On every request, the plugin intercepts the URL at the request filter and rewrites it to the correct internal query. No .htaccess editing, no rewrite rule corruption.

Permalink Manager Pro URI Editor tab in WordPress admin showing the Posts sub-section with Posts / Pages / Media / Categories / Tags filters, a Hello world! post with slug hello-world and Published status, a Custom permalink input field with "hello-world" value, the resulting URL displayed below, and Save all the permalinks buttons

The single feature that matters most

Of everything Permalink Manager does, the one that justifies installing it on day one is per-post URI override. Native WordPress lets you edit a post’s slug, which becomes the last segment of its URL. Permalink Manager lets you edit the entire URL for that post, ignoring the global structure entirely.

So you can have:

  • https://example.com/post-slug-here/ for one post (using a custom URI)
  • https://example.com/category/post-slug-here/ for another (using the standard structure)
  • https://example.com/feature/our-best-article/ for a third (custom URI again, with completely different path)

All three coexist, all three resolve correctly, all three are crawled normally by search engines. The plugin doesn’t break anything else; it just adds the ability to override.

The natural place this matters is for landing pages and high-value content. A homepage hero might link to /get-started/, an SEO-focused page might want /best-wordpress-themes-2026/ without the category prefix, a campaign page might need /black-friday-2026/. None of those fit the global permalink structure cleanly. Editing them inline in the URI Editor is a 10-second job.

The URI editor metabox also appears on the post edit screen itself, both in the classic editor and the Block Editor. So you don’t have to leave the post you’re writing to set its URL; the field is right there in the sidebar.

The URI Editor in practice

The URI Editor is the main entry point in the admin. Tools → Permalink Manager → URI Editor drops you on a paginated list of all your posts with the current URI for each one editable inline.

What you see (this is the screenshot above):

  • Filters across the top: Posts | Pages | Media | Categories | Tags. Click to switch which type you’re editing. Custom post types appear as additional filters once they’re registered.
  • One row per post: Title, slug + status info on the left; the current custom URI on the right.
  • Live preview of the resulting URL below each URI input, so you see exactly what will happen.
  • Bulk save buttons at the top and bottom of the list.
  • Filter by date and search by title in the top right.

Editing is exactly what you’d hope for: type a new URI, click Save. The old URL becomes a 301 to the new one automatically (configurable in Settings). No page reload, no rewrite-rule flush, no confusion.

The same per-post URI field appears as a metabox on individual post edit screens, so the bulk editor is for batch work and the per-post editor is for one-off changes during writing. Both feed the same underlying data.

A small thing that turns out to matter a lot: the bulk editor shows you which URIs are default (generated from the permastructure) versus custom (explicitly overridden). You can filter to "show only custom URIs" to see at a glance which posts have been hand-edited. Helpful when you inherit a site and want to know which URLs were intentionally curated vs. just default.

Permastructures: per-post-type URL templates

The permastructure system is where Permalink Manager Pro pulls away from competitors. WordPress core has one global permalink structure. Permalink Manager Pro lets you define a different pattern per post type and per taxonomy.

Open Tools → Permalink Manager → Permastructures and you see a list of every registered post type and taxonomy on the site, each with its own permastructure input.

Permalink Manager Pro Permastructures tab showing Post types section with Posts (%postname%), Pages (%pagename%), Media (empty), and Taxonomies section with Categories (category/%category%) and Tags (tag/%post_tag%), each row with Extra settings and Available tags buttons

You can use any rewrite tag in any position. Standard WP tags (%postname%, %category%, %year%, %monthnum%, %day%, %author%) work, plus the plugin adds:

  • %post_id%: the numeric post ID
  • %post_type%: slug of the post type
  • %any_taxonomy_slug%: slug of any taxonomy term attached to the post
  • %parent%: slug of the parent post (for hierarchical types)
  • %any_acf_field%: value of any ACF field
  • %any_postmeta_key%: value of any post meta
  • %woocommerce_attribute_*%: WC product attribute values

The "Available tags" button next to each permastructure shows every tag valid for that type, with the actual current value for a sample post so you can verify.

A common pattern from real projects:

Recipes: /recipes/%cuisine%/%postname%/
Events: /events/%year%/%monthnum%/%postname%/
Products: /shop/%product-category%/%postname%/
Authors: /author/%user_login%/

Each post type gets its own structure. No more "everything must follow /category/post/". Combined with per-post URI overrides, you get total URL control.

Bulk tools: find/replace and regenerate

Once you have hundreds or thousands of posts using a permastructure, restructuring them by hand is impractical. The Tools tab handles bulk operations.

Find & Replace does what the name says, across all generated URIs. Search for any string, replace with another, preview the changes before applying. Common use cases:

  • Rename a category and want the URIs to update: find /old-cat-slug/, replace with /new-cat-slug/, all posts in that category get their URIs updated.
  • Drop a URL segment: find /blog/, replace with /, every post that used to have /blog/ in its URL no longer does.
  • Add a prefix: find /, replace with /v2/ (with regex or careful scoping).

The preview shows what’s about to change before you click. The Save button writes the changes plus auto-creates 301 redirects from each old URI to the new one. No data loss, no orphaned URLs.

Bulk URI Regenerator is the other half. After you change a permastructure (say you switch products from /shop/%postname%/ to /products/%product-category%/%postname%/), existing posts still have their old URIs cached. The regenerator re-runs the permastructure rules across all posts of that type, updating the cached URIs to match the new pattern. Again, 301s are auto-created for the changed URLs.

For larger sites (10,000+ posts), the regenerator queues the work through WordPress’s background scheduler (Action Scheduler is used internally) so it doesn’t time out. Progress shows in the admin, you can navigate away and come back, the job continues.

Permalink Duplicates is the safety net: a finder for any URIs that would collide between posts. Two posts with the same URI is a recipe for one of them being unreachable; the duplicates tool surfaces these before they cause problems. Fix the conflicts by editing one of the URIs.

The 301 redirects system

Permalink Manager Pro auto-creates redirects in two cases: when you change a URI in the URI Editor, and when bulk operations rewrite multiple URIs. The redirects are stored in permalink-manager-redirects and applied by the plugin on every request (no .htaccess editing).

The Redirects panel (in the URI Editor section) shows you the full list: old URL → new URL, status code (301 or 302), date created. You can edit any entry, delete it, or add entries manually. Adding entries manually is useful when you’re migrating from a non-WordPress platform: you have a list of old URLs from the legacy site, you want them to redirect to corresponding new posts. Drop them in here and they’re live.

Two redirect categories the plugin manages:

  1. Auto redirects: created when a URI changes via the editor or bulk tools. Default 301 status. You can disable auto-creation if you want manual control.
  2. Extra redirects: arbitrary old URL → new URL mappings you add manually. Useful for migration imports.

A small gotcha worth knowing: the redirects apply before WordPress’s own canonical URL redirector. So if you have a redirect from /old-url/ to /new-url/, and /new-url/ itself is a redirect to /even-newer-url/, visitors hitting /old-url/ get redirected twice. The plugin doesn’t (yet) chain redirects in a single hop. For SEO purposes this is acceptable but not optimal; on heavily-restructured sites it can compound.

Installation and the first 15 minutes

Three steps to a working install, then maybe 10 minutes of poking around to understand the layout.

  1. Upload Permalink Manager Pro at Plugins → Add New → Upload Plugin. Install and activate.
  2. Navigate to Tools → Permalink Manager. This is the main entry point.
  3. Confirm your current URLs are intact. Visit a couple of public posts on your site; they should all work exactly as they did before. The plugin starts "off" in terms of overrides; nothing changes until you edit a URI or change a permastructure.

That’s the install. The first 15 minutes after install I usually spend:

  • Reviewing the Permastructures tab to see the current patterns. They default to whatever WordPress’s permalink structure is set to, so usually %postname% for everything. If you want per-type customization, set the new patterns here first (before editing any individual URIs).
  • Checking the Settings → General tab. The defaults are reasonable; the one I usually change is "Trailing slashes", explicitly set it to either "with" or "without" to match your site’s convention.
  • Browsing the URI Editor for Posts and Pages just to see what’s there. Editing nothing yet, just looking.

After that I let the plugin sit for a few weeks before touching anything. You don’t want to be the person who restructures URLs in an afternoon and then realizes Google takes weeks to recrawl.

Permalink Manager Pro Settings tab showing General settings panel with sub-tabs General settings / Redirect settings / Exclusion settings / Third party plugins / Advanced settings / Licence, and three configuration sections: Permalink update mode dropdown, Slugs mode dropdown (Use WordPress slugs default), and Trailing slashes dropdown (Use default settings)

Real-world scenarios where it earned its keep

Specific projects from the last two years where Permalink Manager Pro saved the day.

Restructuring a 4,000-post blog without losing traffic. Client wanted to move from /blog/2024/10/post-slug/ (year/month-based) to /articles/topic/post-slug/ (topic-based). Without Permalink Manager Pro, this is a multi-day project of writing rewrite rules, generating 4,000 redirects, testing thoroughly, deploying carefully. With it: change the permastructure for the blog post type, run the URI Regenerator, all 4,000 URIs update and 4,000 redirects are auto-created. Total time: 90 minutes including verification. Inbound search traffic dropped maybe 10% for two weeks while Google recrawled, then recovered fully.

Migrating from Squarespace to WordPress. Client had 200 pages on Squarespace with specific URL patterns I needed to preserve so existing inbound links and Google indexing wouldn’t break. I exported the URL list from Squarespace, mapped each old URL to a corresponding WordPress post, and pasted the 200-row map into Permalink Manager’s "Extra redirects" panel. On the WordPress side, set custom URIs for the matching pages. Migration complete, every old URL still works, Google sees the redirects and updates its index.

Custom URL pattern for an event venue’s site. Each event has a custom post type with a date meta field. They wanted the URL to be /events/2026/05/event-name/ for chronological browsing. With Permalink Manager Pro’s permastructure for the events CPT set to /events/%year%/%monthnum%/%postname%/, every event automatically gets that pattern based on its event date meta (with a small adjustment to use the meta field instead of the post date via a filter; see the developer section). No custom rewrite rules.

Removing /category/ from URLs on a WooCommerce store. Client wanted /electronics/laptops/ instead of /product-category/electronics/laptops/. Permalink Manager Pro Settings → Third party plugins has a "WooCommerce" sub-tab where you can override the WC category base. Set to empty, all product category URLs lose the /product-category/ prefix immediately, with auto-redirects from the old URLs.

Per-language URI customization with WPML. Multilingual e-commerce site needed URLs like /produits/categorie-fr/produit/ for French and /products/category-en/product/ for English, with the slugs being actual French/English words, not auto-translated. Permalink Manager Pro respects WPML’s translation context, so per-translation custom URIs work in the URI Editor. Set the French URI for each translated post, the WPML language switcher routes accordingly.

Developer reference

The hook surface is large (82 filters and a handful of actions, all prefixed permalink_manager_). Here are the ones I’ve actually used.

Use a meta field as a URL component

add_filter( 'permalink_manager_custom_field_value', function ( $value, $field, $element ) {
 if ( $field === 'event_year' && ! empty( $element->ID ) ) {
 $event_date = get_post_meta( $element->ID, '_event_date', true );
 if ( $event_date ) {
 return date( 'Y', strtotime( $event_date ) );
 }
 }
 return $value;
}, 10, 3 );

Now you can use %event_year% as a permastructure tag and it’ll pull from the _event_date meta field instead of the post’s published date.

Disable Permalink Manager for specific post types

add_filter( 'permalink_manager_disabled_post_types', function ( $disabled ) {
 $disabled[] = 'attachment';
 $disabled[] = 'shop_order';
 return $disabled;
} );

Useful when you don’t want the plugin touching certain post types (orders should never have custom URIs).

Sanitize allowed characters in URIs

add_filter( 'permalink_manager_sanitize_regex', function ( $regex ) {
 // Allow underscores in URIs (default strips them)
 return '/[^A-Za-z0-9\-\_\/]/';
}, 10, 1 );

Default sanitization is restrictive; if you have a reason to allow underscores, equals signs, or other characters, this filter unlocks it.

Control trailing slashes site-wide

add_filter( 'permalink_manager_control_trailing_slashes', function ( $control ) {
 return 'add'; // 'add', 'remove', or 'default'
} );

Forces a global policy on trailing slashes. Useful when migrating between hosts that handle them differently.

React to URI changes

add_action( 'permalink_manager_updated_post_uri', function ( $post_id, $new_uri, $old_uri ) {
 // Log to your CRM or analytics tool
 if ( function_exists( 'my_app_log_event' ) ) {
 my_app_log_event( 'permalink_changed', [
 'post_id' => $post_id,
 'old' => $old_uri,
 'new' => $new_uri,
 ] );
 }
}, 10, 3 );

Useful for audit logging or external system sync.

Allow URIs to start with a specific prefix

add_filter( 'permalink_manager_allow_new_post_uri', function ( $allow, $post, $uri ) {
 // Forbid any URI that doesn't start with /docs/ for the 'documentation' post type
 if ( $post->post_type === 'documentation' && strpos( $uri, 'docs/' ) !== 0 ) {
 return false;
 }
 return $allow;
}, 10, 3 );

Constrain editors from creating URIs that violate your site’s conventions.

Custom endpoint registration

add_filter( 'permalink_manager_endpoints', function ( $endpoints ) {
 $endpoints['print'] = [
 'name' => 'print',
 'mask' => EP_PERMALINK | EP_PAGES,
 ];
 return $endpoints;
} );

This adds support for /your-post-url/print/ as a special endpoint that you can detect via get_query_var('print') in your template.

Modify URI detection logic

add_filter( 'permalink_manager_detect_uri', function ( $uri, $request ) {
 // If the URL starts with /shop/, strip "shop/" and match against products only
 if ( strpos( $uri, 'shop/' ) === 0 ) {
 return substr( $uri, 5 );
 }
 return $uri;
}, 10, 2 );

Advanced use case: intercept URL resolution before the plugin does its lookup.

Reduce chunk size for bulk operations

add_filter( 'permalink_manager_chunk_size', function ( $size ) {
 return 25; // default is usually 50; reduce on slow hosts
} );

If your host kills long-running PHP processes, smaller chunks let bulk operations complete in more steps with less risk of timeout.

Performance, SEO, and gotchas

Performance. The URI lookup happens at the request filter (very early in WordPress’s load). Permalink Manager stores all URIs in a single option (one DB query, cached for the request) and runs a regex match against the incoming URL. For 99% of sites this is faster than WordPress’s native rewrite rules. For sites with 50,000+ posts the URI option gets large; the plugin transparently chunks it but you may see a small bump in autoload size.

The 301 redirects are similarly cached. The full redirect table loads on every request that doesn’t match an existing post, but again, single DB query and cached.

SEO impact. This is the part to think hardest about. Permalink Manager Pro doesn’t directly do anything SEO-positive or SEO-negative; what it does is give you the ability to restructure URLs, which has direct SEO consequences.

Things that work well:

  • 301 redirects are issued on every URL change, preserving link equity
  • Yoast, Rank Math, AIOSEO all pick up the new URLs for canonical tags and sitemaps
  • Google recrawls URLs that 301 and eventually updates its index (typically 2-6 weeks)
  • The plugin doesn’t introduce duplicate-content issues (each post has exactly one canonical URI at any time)

Things to be careful with:

  • Changing URLs always temporarily hurts traffic until Google recrawls; don’t do it casually
  • Avoid changing the SAME URL multiple times in quick succession; redirects chain and Google may not follow long chains
  • Sitemaps need to update to reflect new URLs (Yoast / Rank Math do this automatically; verify with wp-sitemap.xml directly)
  • Plan major restructures for low-traffic periods (weekends, off-season) to minimize crawl-budget pressure

Caching plugins. Works fine with WP-Optimize Premium and other page caches. The URL rewrite happens before the cache lookup, so cached pages serve fast. After a permastructure change, purge the cache so old URLs don’t continue serving from cache.

WooCommerce. Deep integration but worth testing on staging first. Product URLs, category URLs, attribute URLs all can be customized; the WC checkout/cart/my-account URLs are typically left at WC defaults (they’re not pretty URLs anyway).

Permalink Manager Pro Debug Data tab showing readonly textareas for Array with custom permalinks, Array with redirects, Array with external redirects, Array with permastructures, and Array with settings, each with a Remove all link below for resetting that data category

Gotchas worth knowing.

  • Don’t run the bulk URI regenerator during peak traffic. It’s queued via Action Scheduler so it doesn’t time out, but it does run database writes for every post. On a busy site that can briefly spike load. Run it overnight or during a maintenance window.
  • .htaccess rules can conflict. If you have hand-written .htaccess redirects that overlap with Permalink Manager’s redirects, the .htaccess ones win (they’re applied by Apache before PHP runs). Pick one source of truth.
  • Yoast canonical tags can disagree with PM-generated URLs if you’ve set custom canonicals in Yoast that point at different URLs. Audit canonical tags after major URI changes.
  • Permalink Manager doesn’t handle WC variation URLs. Variations still use ?attribute_x=value query strings. The plugin doesn’t try to prettify them.
  • The Debug tab is read-only by design. Don’t paste arbitrary arrays into the textareas hoping to manually edit the URI map. The arrays are formatted PHP serialized data and editing them by hand will corrupt the option. Edit via the UI.
  • Multisite needs careful setup. Each site in a network has its own URI map. Network-wide rules need to be set per site, or use the permalink_manager_* filters in a Must-Use plugin to apply to all sites.
  • AMP plugins can conflict. If you use an AMP plugin that rewrites URLs (?amp or /amp/), test the interaction. Usually works but verify.

Pricing and licensing

Permalink Manager Pro is sold by Maciej Bis (the developer) as an annual subscription with single-site, 5-site, unlimited, and lifetime tiers. Pricing changes periodically; check permalinkmanager.pro for current numbers.

The free version (just "Permalink Manager") is on wordpress.org with the URI Editor only. It does the basic per-post URI override but doesn’t include permastructures, bulk find/replace, the URI regenerator, the redirects panel, or the WC integration. Worth installing on a small site to test the workflow; for any real project you’ll want Pro.

That’s what I install on staging sites and side projects. For production sites where you want direct support, buy direct.

FAQ

Will Permalink Manager break my existing URLs?
No. The plugin starts in a "passive" state: it observes the global permalink structure and respects all existing URLs until you explicitly change something. Install on a live site is safe; the change happens only when you edit.

Can I undo a permastructure change?
Yes. Permastructure changes don’t immediately apply to existing posts (which is good, you have a chance to think). To apply them you have to run the URI Regenerator. To undo, change the permastructure back and run the regenerator again. The intermediate URIs become 301 redirects so even mid-thrash everything still works.

Does it work with the WordPress block editor?
Yes. The URI editor metabox appears in the Block Editor sidebar (under the document panel). Edit URIs without leaving the post editor.

Will it conflict with my SEO plugin (Yoast, Rank Math, AIOSEO)?
No. Permalink Manager respects the canonical URLs your SEO plugin generates. Each post gets one canonical URL, the SEO plugin’s sitemap reflects the new URIs, and there’s no double-canonical issue.

Can I migrate from the free to the Pro version?
Yes. Install Pro on top of free; data is preserved. The free plugin’s per-post URI overrides remain, Pro adds the rest.

Does Permalink Manager handle subdomain URLs?
The plugin works on the current site’s URLs only. For subdomain handling (multisite) each site has its own configuration.

What happens if I deactivate the plugin?
URI overrides are preserved in the database. Custom URIs stop being applied (URLs revert to WordPress default behavior). Redirects also stop. Reactivate and everything works again. Uninstall completely (deactivate + delete) removes the options.

Can it handle dynamic per-user URLs?
The plugin generates URIs at write time, not request time. So dynamic per-user URL paths aren’t supported. For that you’d want a routing plugin or custom rewrite rules.

How does it compare to Yoast SEO Premium’s redirect feature?
Yoast Premium’s redirect tool is for managing 301s after deletes/slug changes; it’s not a permalink customization tool. Permalink Manager Pro is the URL builder; Yoast is the SEO meta + redirect-on-delete tool. They complement each other rather than overlap.

Will it work with FacetWP / SearchWP?
Yes. Both work with WordPress’s standard query system, which Permalink Manager intercepts at the right layer.

Should you install it?

Concrete signals you need this:

  • You’ve ever wanted different URL patterns for different post types and given up because WordPress only supports one global pattern.
  • You’re planning to restructure URLs on a non-trivial site and dread the manual 301 management.
  • You’re migrating from a non-WordPress platform and have a list of old URLs that need to redirect to new posts.
  • You run a WooCommerce store and want to drop /product-category/ from URLs.
  • You manage a multilingual site and want per-language URL slugs without auto-translation.
  • You inherited a site with custom rewrite rules in functions.php and want to consolidate them into a managed UI.

If two of those apply, Permalink Manager Pro from GPL Times is the right install. The free version on wordpress.org is fine for trying the URI editor on a personal site; Pro becomes necessary the moment you need permastructures, bulk operations, or proper redirect management.

It’s the kind of plugin you don’t appreciate until the day you really need it, and then you appreciate it for years. That’s the highest praise I can give a piece of infrastructure software.