The permalink structure shapes every URL on the site. The default "Plain" setting produces URLs like ?p=123 - keyword-free, unfriendly, and unmemorable. Switching to a clean structure is one of the first steps when launching any WordPress site.
Why this matters
Google uses the words in a URL as a topic signal. /best-coffee-machines/ beats /?p=123 on both ranking and click-through rate - in search results, Google shows the URL beneath the title, and descriptive paths look more trustworthy. Backlinko's research found that pages with short, descriptive URLs receive on average 250% more clicks than pages with long messy URLs.
Shareability matters too. /best-coffee-machines/ is something you can read aloud, hand-write on a card, or use in print marketing. ?p=123&cat=4 is unmemorable.
One warning: changing the structure on a live site requires 301 redirects, otherwise every historical URL returns 404 and rankings vanish. Plan permalinks before launch whenever possible.
How to detect
Open Settings > Permalinks. If the selected structure is "Plain" (?p=123), "Numeric" (/archives/123), or "Day and name" - there is room for improvement. The recommended choice is "Post name" (%postname%) or a custom structure.
Complementary check: browse a few posts and inspect the URL. If they show numbers or dates instead of words, the structure is suboptimal. If you see /index.php/post-name/ there is a server-side rewrite issue to fix.
Third check: in Google Search Console > Performance > Pages, if pages with messy URLs receive lower CTR than pages with clean ones, that is direct evidence URLs influence clicks.
How to fix
Open Settings > Permalinks. Pick a recommended option:
- Post name (
/%postname%/) - the simplest and most common. Suits most sites. - Custom Structure (
/%category%/%postname%/) - good for content sites with a stable hierarchy. Every post displays its category in the URL.
Save changes. WordPress rewrites .htaccess automatically on Apache. On nginx you will see a notice with rewrite rules to copy into the server block and reload.
For a brand new site (pre-launch): you are done. Pages will have clean URLs from the start.
For an existing site (already live): the change makes every old URL return 404. You must set up 301 redirects:
- Install the Redirection plugin (free). It automatically captures 404s and offers a redirect when it can find a matching post.
- If the change is from a known structure (Plain) to another known structure (Post name), you can write manual
.htaccessrules that map?p=123to/post-name/via a WP query. - After redirects are in place, resubmit the sitemap in Google Search Console.
Common mistakes
First mistake: changing permalinks on a live site without redirects. Every external link (Facebook posts, newsletters, other blogs) pointing at old URLs returns 404. Rankings drop, backlinks die. Always set up 301s before changing.
Second mistake: using %category% without considering the future. If a post moves from one category to another, its URL changes - and the old link breaks. If your categories are not stable, use %postname% only.
Third mistake: putting dates in the URL. /2024/05/post-name/ looks descriptive but signals to Google the post is dated. If you update it in 2026, the URL still says 2024 and Google may consider it stale.
Fourth mistake: long slugs. /the-best-most-comprehensive-guide-to-coffee-machines-in-2024/ truncates in results. Keep slugs to 3-5 words.
Fifth mistake: forgetting nginx. There is no .htaccess on nginx - without rewrite rules in the server block, every URL returns 404 after the change.
Verifying the fix
Open several posts in the browser and confirm the new URL works. Run curl -I https://example.com/old-url/ and confirm a 301 to the new URL. In Google Search Console > Coverage, watch 4-8 weeks for any rise in 404s. Confirm old backlinks now 301 properly using Ahrefs Site Audit.
%postname%, invest in writing a great slug per post - 3-5 words, each meaningful, primary keyword first. In the Block Editor, edit the slug in the Permalink card in the sidebar.