WordPress prevents duplicate slugs by automatically adding numeric suffixes to your URLs. When you create a second page titled "Contact", WordPress changes its permalink, creating awkward URLs such as "contact-2".
Permalink Manager does not alter WordPress’s native slugs. It creates its own permalink layer, so you can use the same slug for multiple pages and categories' custom permalinks without breaking the native slug system.
The plugin works by dynamically overwriting original URLs everywhere on your site's front-end, in menus, sitemaps, and canonical tags, while keeping the native slugs intact in the database for compatibility.
How WordPress Handles Duplicate Slugs
When you publish a post, page, or taxonomy term, WordPress creates a slug from the title. The slug is the part of the URL that identifies the item, for example (for "About us" page):
https://example.com/about-us/
WordPress requires each slug to be unique within the same content type and hierarchy. If a slug is already in use, WordPress handles this inside wp_unique_post_slug() function and adds a number at the end inside, e.g.:
- First page titled "About us" →
about-us - Second page titled "About us" →
about-us-2 - Third page titled "About us" →
about-us-3
This can be frustrating when you want to use the same title for multiple child pages or subcategories that belong to different parent items. You may want to use the same slug for e.g.:
- Hierarchical structures
Child pages under different parents, for example /marketing/contact/ and /sales/contact/. - Multilingual sites
Similar pages in different languages, such as /en/contact/ and/ /fr/contact/ when using WPML or Polylang.
The Mapping Process
When a visitor goes to e.g. https://example.com/about-us/, WordPress processes the request and extracts the slug (about-us). Using its rewrite rules, it determines which content type the URL matches and performs a database query based on that slug.
If multiple pages used the same slug (post_name), the query would return more than one result and WordPress could not determine which of them should be displayed.
To prevent this, WordPress requires each slug to be unique so that every single URL always points to a single page. Without this, WordPress would need to analyze other URL parts, such as categories or parent pages, to decide which item to display.
This would increase DB query complexity and reduce performance. Enforcing a unique slug avoids that overhead and allows to parse the URLs using a single, efficient query.
Reusing Slugs with Permalink Manager
Permalink Manager does not modify WordPress’s built-in slugs. Instead, it lets you define custom permalinks while keeping the slugs intact. It overwrites original URLs with custom permalinks that you can adjust freely.
If you do not modify the plugin settings, the original slug is used also for new custom permalinks. You can remove numeric suffixes like "-2" from these URLs by choosing one of two available solutions.
- You can manually remove the numerals appended to the individual permalinks.
- You can make Permalink Manager use the actual titles instead of native slugs in the custom permalinks.
Method 1: Manually Remove Numeric Suffixes
The easiest way to duplicate the slug is to remove the numerals directly in the content editor when changing the permalink. This method works well if you only need to update a few URLs, but it can take longer if your site has many pages using the same slug.


Method 2: Use Titles Instead of Slugs Automatically
Instead of adjusting each permalink by hand, you can make the process much faster. To simplify it, enable “Use actual titles as slugs (Force custom slugs)” under "Slugs mode" in the plugin settings.

This changes how the plugin generates new custom permalinks for all content types. When enabled, Permalink Manager will always use the actual title (eg. “Shoes“) instead of the native slug (eg. “shoes-2“) in the custom permalink.
If you prefer not to apply this globally, you can adjust the slug mode for selected post types or taxonomies by replacing default tags like %product% or %product_cat% with %native_title%:
Troubleshooting
Why Is WordPress Adding a “-2” to the Slug Even Though the Page Doesn’t Exist?
If you try to use a specific slug, such as /services/, but WordPress changes it to /services-2/ even though no other post or page uses that slug, it means the original slug is already "reserved" in the database. This usually happens in one of two cases:
- Trashed Pages and Posts
When you move a post or page to the Trash, WordPress does not delete it immediately from the database. It remains there for 30 days (by default) so you can restore it if needed. Even though it is not "live", the slug (post_name) is still kept in the wp_posts table. - Media Attachments Using the Same Slug
Every image or file you upload to the Media Library is treated as an attachment (built-in post type) and gets its own entry in the wp_posts table just like posts and pages. To fix it, you must find the image in the Media Library and either change its slug or remove it to "unlock" the slug.
How Do I Find and Fix Duplicate Permalinks?
Permalink Manager can detect permalinks with duplicated slugs because it uses a custom algorithm to detect the URLs. Shortly, it checks the full URL address instead of the native slug (part of URL). Hence, the slugs can be reused, but still you need to make sure that the full URL address is unique.

Concurrently, you can always check if any of custom permalinks is duplicated in "Permalink Duplicates" section. To display it, please go to “Tools -> Permalink Manager -> Tools -> Permalink Duplicates” admin page.

