Permalinks are the permanent URLs of your WordPress content, and the permalink structure is the pattern they all follow. It is one of the few settings that affects literally every page of a site and one of the most expensive to change later, because changed URLs break backlinks, bookmarks and search rankings unless every old address is redirected. The good news: the decision is not hard. For most sites the post name structure is the right answer, dates belong only in news URLs, and the real craft lies in writing good slugs. This article covers the best practices, and what to do if an existing site is stuck with the wrong structure.
What is a permalink in WordPress?
A permalink is the permanent, public URL of a piece of content: a post, a page, an archive. WordPress builds these URLs from the pattern configured under Settings and Permalinks, using placeholders called structure tags. The options WordPress offers:
- Plain: https://example.com/?p=123, the raw database ID as a query parameter.
- Day and name: https://example.com/2026/07/30/sample-post/
- Month and name: https://example.com/2026/07/sample-post/
- Numeric: https://example.com/archives/123
- Post name: https://example.com/sample-post/
- Custom structure: any combination of tags like %postname%, %category%, %year%, %monthnum%, %day%, %post_id% and %author%.
The last path segment, the human-readable name of the individual post, is called the slug. WordPress generates it from the title and lets you edit it per post, which is where most of the practical optimization happens.
Which permalink structure is best for SEO?
For the large majority of sites: post name, nothing else. The reasoning is straightforward. Google's own URL structure guidelines recommend simple, descriptive URLs with meaningful words. The post name structure delivers exactly that: short, readable, stable, with the topic of the page visible in the address. URLs are at most a lightweight ranking signal, but they are a real usability and click-through signal: a searcher who sees example.com/wordpress-security-checklist/ in a result knows what to expect, while example.com/?p=8371 says nothing at all.
The plain structure exists for technical fallback reasons and should never stay active on a public site. The numeric structure shares the same problem with friendlier cosmetics. And a worry from older tutorials can be retired: starting the structure with %postname% caused performance issues in very old WordPress versions, but that has been a non-issue for over a decade.
When do dates in URLs make sense?
Date-based structures answer a real need for news publishers. When many articles cover the same recurring topic, the date in the URL disambiguates them, and readers of news genuinely care when a piece was published. If that describes your site, month and name is a reasonable choice.
For everything else, dates in URLs age badly. An evergreen guide living at /2019/05/wordpress-seo-guide/ broadcasts its age in every search result, even after five careful content updates, and users measurably prefer fresh-looking results. Removing the date later means changing every URL, with the full redirect overhead that this article warns about twice. Keep dates out of the URL and show a visible last-updated date in the content instead: search engines pick up freshness from the page itself and from structured data, not from the address.
Should the category be part of the URL?
The custom structure /%category%/%postname%/ is popular and defensible: the URL gains a keyword and shows the site section, for example /security/wordpress-nonces-explained/. Two costs come with it. First, URLs get longer and deeper. Second, and more importantly, the URL now depends on the category assignment: move the post to a different category and its address changes, which silently creates a redirect obligation every time you reorganize content. Shops face the same question with product URLs containing the product category.
There is no wrong answer here, only a trade-off between a semantic URL and a stable one. If you do not have a specific reason to include the category, the plain post name structure is the safer long-term default. Whichever you pick, pick it once: consistency beats micro-optimization.
How to write good URL slugs
The structure is set once, but you write a slug for every post, and the auto-generated one is rarely the best one. The rules:
- Short and specific. Three to five meaningful words. The auto-slug of a long title (how-to-choose-the-right-wordpress-permalink-structure-for-your-website) trims down to wordpress-permalink-structure without losing anything.
- Include the topic keyword the page should be found for, once, naturally.
- Lowercase, hyphens between words. WordPress does this automatically; do not fight it with underscores or camelCase.
- ASCII only. Replace umlauts and accents (ae for ä, e for é), because special characters end up percent-encoded and unreadable when the URL is shared.
- No filler words that add nothing. Articles and stop words can go when the slug stays readable without them; readability wins over dogma.
- No dates, no version numbers in slugs of content you intend to keep current.
One warning: editing the slug of an already published post changes its URL. WordPress usually redirects the old post URL automatically, but do not rely on that for important pages; verify it or set an explicit redirect.
How to change the permalink structure of an existing site safely
Sometimes the structure really is wrong, a decade of /2014/03/post-name/ URLs on an evergreen content site, and the fix is worth the surgery. The safe procedure:
- Inventory first. Export all indexed URLs from Google Search Console and your sitemap, so you know what must keep working.
- Change the structure under Settings and Permalinks, ideally on a staging copy first.
- Redirect every old URL pattern to the new one with 301 redirects. For pattern-shaped changes a single server rule covers everything. Removing the date prefix, for example, looks like this in Apache configuration:
# .htaccess: redirect /2019/05/some-post/ to /some-post/
RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/(.+)$ /$3- Test a sample of old URLs, including feeds, paginated archives and image attachment pages, before and after going live.
- Watch Search Console for crawl errors over the following weeks and fix the stragglers.
Redirect plugins like Redirection do the same job from the WordPress admin if server config is out of reach. What you must not do is change the structure and hope: every unredirected old URL is a 404 that costs a ranking, a referral or a reader.
How InspectWP helps you check your URL setup
A clean permalink strategy only works if the technical signals around it are right. The InspectWP report checks the canonical tag (which tells search engines the definitive URL of a page and prevents duplicate-content trouble between URL variants), the redirect from HTTP to HTTPS, the XML sitemap and the robots directives of your WordPress site. After a permalink migration these checks are exactly the ones that tell you whether search engines are being pointed at the new URLs correctly, and a single free report takes less time than finding the first broken link by hand.