Plugin performance

Permalink Manager was originally developed with small and medium-sized websites and WooCommerce stores in mind. As a result, it may not offer optimal performance for a very large websites.

To reduce the number of SQL queries and therefore reduce the pageload time, the plugin stores all custom permalinks within a single serialized array. The main reason for this is that the operations on arrays are generally quicker if they are made directly via PHP.

While this method works effectively for typical websites, even those with thousands of custom permalinks, it may not scale as efficiently for exceptionally large websites.

Performance Limitations

PHP Limitations

In typical use case, the plugin can store and rewrite 60,000-80,000 of custom permalinks without any major issues. Nevertheless, extremely large array can slow down the pageload time. The bigger the array, the more time PHP needs to process it.

If you need to rewrite more than 80,000 permalinks, you may notice a small performance decrease. This limit is not fixed and it will vary depending on the server and cache configuration.

MySQL Limitations

The array size can also influence MySQL performance since all custom permalinks reside in a single database row. The array size can also influence MySQL performance since all custom permalinks reside in a single database row.

As this row grows, it may reach a point where MySQL throws an error like "Got packet bigger than 'max_allowed_packet' bytes". This indicates that the custom permalinks array has exceeded the size allowed by the max_allowed_packet configuration.

Please also keep in mind that some hosting providers automatically remove the large database records stored in the 'wp_options' table. For instance, WPEngine could erase the custom permalinks array if its size is larger than 1MB (approx. 10.000-15.000 custom permalinks).

Reducing Plugin Data Size

If you want to decrease the size of the custom permalinks array, consider excluding content types that do not require a customized permalink different from their original URL. A common example is the attachments (Media) post type, which usually does not need customization.

"Exclude content types" checkboxes

By excluding a specific post type or taxonomy, the plugin will only stop creating custom permalinks for any new entries of that content type. However, any existing custom permalinks will remain in the database and will not be deleted automatically.

To fully clean up custom permalinks from excluded content types, navigate to "Tools -> Permalink Manager -> Tools -> Permalink Duplicates" in your dashboard. Then, click the "Fix custom permalinks & redirects" button.

Once done, all excluded posts and terms will be removed from the plugin's data, which helps reduce its overall size.

Fix custom permalinks

Dynamic URL and Customization Limitations

Using Permalink Manager you can conveniently rewrite and manage custom permalinks for your WordPress content. The plugin is compatible with standard content types like posts and pages, as well as custom types such as WooCommerce products.

It also supports taxonomies, including built-in ones like tags and categories, along with custom taxonomies such as product categories.

Each custom permalink is linked to an individual post or term through its unique ID. Because of this, each item can only have one main (canonical) permalink.

This approach is intended to optimize PHP performance by limiting the number of searches within the permalinks array. Additionally, it reduces the risk of content duplication, which can negatively impact SEO. Having the same page accessible under multiple URLs may cause search engines to waste crawl budget on duplicate content or dilute SEO signals such as authority across multiple URLs.

Custom URLs for Dynamic Archive Pages

Is not possible to dynamically create a archive page using custom permalinks to display content that matches a specific combination of taxonomy terms. For example, you cannot create a new archive page that would list all products tagged with "leather" and also assigned to the "shoes" category.

https://shop.com/shoes/ (Product category)
https://shop.com/leather/ (Product tag)

https://shop.com/shoes/leather/ (Product category + Product tag)

To sum up, if such a page does not exist anywhere in the admin dashboard, you cannot create it by merging different archive pages using the Permalink Manager alone. Without a unique ID in the database for such a combination, the plugin cannot assign a custom URL to it and the plugin does not create new archive pages just by combining taxonomy terms in the URL.

The reason for this lies in WordPress core which does not recognize combinations of taxonomy terms as valid archive pages, nor does it store any relationship between terms from separate taxonomies.

There is no way to customize such a combination in the same manner that you can adjust individual categories and tags. Even the possibility of defining a title for such a combination is not available anywhere inside the WordPress dashboard.

Query Parameters Cannot Be Rewritten

Another limitation is that when a URL is opened and Permalink Manager parses it to determine which page it belongs to, the plugin ignores the $_GET variables (query parameters). As a result, you may not use the Permalink Manager plugin to rewrite the query parameters.

This means that it is not possible to format URLs with query parameters in order to convert them into pretty permalinks. This is because, as previously stated, a page may only have one static custom permalink.

https://shop.com/location/?state=new-jersey&city=newark ==> https://shop.com/location/new-jersey/newark

Additionally, it is not possible to construct a custom permalink format using Permastructures that include query parameters in the URL. Because of this, all non-alphanumeric characters, like question marks and ampersands, will be automatically removed from the custom permalink's (canonical URLs).

Storage Model

If each custom permalink is stored in a separate row within MySQL database, detecting them on the front-end results in numerous SQL queries. In contrast, by storing all permalinks serialized in one row instead, only a single SQL query is needed.

This reduces the number of database operations dramatically. Since PHP handles the permalinks as an array in memory, functions like array_search() can quickly process the data without triggering additional database queries.

Because of this, the plugin saves custom URIs, redirects, permastructures, and its settings in a serialized form within the wp_options database table. This storage approach meets the requirements of most WordPress websites and common user cases.
Permalink Manager DB data

If necessary, you may preview all of the data by using the "Debug" section.

"Debug" section

Last updated by Maciej Bis on: August 11, 2025.


Maciej BisFounder of Permalink Manager & WordPress Developer

The developer behind Permalink Manager, a plugin for managing permalinks, has been working with WordPress, creating custom plugins and themes, for more than a decade.

Go up