Trailing Slash and SEO: Does /page/ vs /page Matter?
The slash at the end of a URL is not decoration. Everywhere except the root of your domain it makes a different address, and serving both is the thing that hurts.
On this page
To a search engine, example.com/guide and example.com/guide/ are two different URLs, and the only place that is not true is the root of your domain. Neither version is better for SEO, and there is no ranking bonus hiding in the slash. The problem appears when both addresses return a normal page, because then you have published every post twice and asked search engines to work out which copy counts.
The fix is small and permanent: decide which version your site serves, redirect the other to it with a 301, and make your internal links agree. Here is how to check what you currently do, and the two mistakes that turn a five minute fix into an afternoon.
Why the Slash Changes the URL
A URL is an exact string, and machines compare it as one. Add a character to the end of a path and you have named a different resource, which is why /guide and /guide/ can, in principle, serve completely different content. Search engines have to assume they might.
The root is the documented exception. example.com and example.com/ resolve to the same thing, because a request always carries at least a slash for the path. Everywhere after that, the slash counts. Google’s own guidance on this is old and unchanged, which is a good sign: it is a rule about URL identity, not a ranking factor, so it has not moved with algorithm updates.
What Happens When Both Versions Answer
If both addresses return a 200 response, you have duplicate content at two addresses for every page on the site. Some people link to one, some to the other, and the signals that should have made one page strong are divided between two.
Search engines are generally good at picking a canonical version, but you are asking them to solve a problem you could delete instead. There are practical costs closer to home too. Analytics reports the same page as two rows, so your best content looks like two mediocre pages. Crawlers fetch everything twice, which matters more now that there are more crawlers hitting your site than there used to be. And any redirect or caching rule written for one form will behave inconsistently for the other.
What WordPress Does By Default
The good news for most sites: WordPress already handles this. With the default permalink settings, posts and pages get URLs ending in a slash, and WordPress performs a canonical redirect if someone requests the version without it. Left alone, a stock WordPress site does the right thing without you configuring anything.
Two exceptions are worth knowing. URLs that point at an actual file, such as /sitemap.xml or an image, never take a trailing slash. And some page builders, custom rewrite rules or headless setups replace the default behaviour entirely, at which point the guarantee disappears. The default is safe until something overrides it, so the only real question is whether something on your site has.
Where Both Versions Go Live
Duplicates usually arrive through one of four doors. A hosting or CDN rule adds or strips slashes at the edge, unaware of what WordPress is doing. A caching layer stores both forms and serves each one happily. A plugin adds rewrite rules for its own routes and handles the slash differently from core. Or a migration brought URLs across from a system with the opposite convention, and old links still point at the old form.
Custom endpoints are a common culprit: membership areas, shop filters, calendar views and API-ish paths added by plugins often answer with or without the slash, because nobody wrote the redirect. Those pages get indexed twice while your ordinary posts behave perfectly, which is why the problem hides so well.
How to Check Which One You Serve
Start in the browser. Take any post URL, remove or add the trailing slash, and load it. If the address bar snaps back to your normal form, a redirect exists. If the page loads and stays on the version you typed, both are live and you have duplicates.
For a definitive answer, run both forms through a redirect checker. You want exactly one hop, returning a 301, landing on the version you serve, and the chosen version returning 200 with no further redirects. Watch for two failures: a 302 instead of a 301, which never consolidates the signals, and a chain such as no-slash to HTTP to HTTPS to slash, which wastes a round trip on every visit. If it is not obvious why the type matters, 301 vs 302 redirects covers it in a minute.
Setting the Rule Without Creating a Loop
If WordPress is already redirecting correctly, do nothing. Adding a second rule that agrees with the first is how loops are born, and a rule that disagrees is how they become permanent. Check before you write anything.
If you do need a rule, add exactly one, at one layer. Server or CDN level is the cleanest place because it runs before WordPress. Managing it in WordPress instead is fine, and a tool such as DevDome Redirect Manager lets you set the type explicitly per rule and purges your caches when the rule changes, which matters when the rule touches every URL on the site. Then confirm your host or CDN is not already doing the same job, because two layers fighting over one slash is the classic cause of a WordPress redirect loop.
What to Fix After
The redirect is only half the job. Internal links, menu items, canonical tags, your XML sitemap and any hardcoded URLs in templates should all use the form you kept, otherwise every internal click spends a hop it did not need and crawlers keep rediscovering the old shape.
Then treat the whole family of URL variations as one decision, because they follow the same logic: http against https, www against non-www, uppercase against lowercase, and slash against no slash. One canonical form, one permanent redirect for each of the others, applied once. Verify from a logged-out private window rather than trusting a settings screen, and this is closed for good.
Disclosure: DevDome publishes this blog and makes the products it mentions. We describe what they do rather than promise results.
Key takeaways
- Except at the root of a domain, /page and /page/ are two different URLs to a search engine.
- Neither version ranks better; serving both with a 200 response is the actual problem.
- WordPress adds a trailing slash to posts and pages by default and redirects the other version for you.
- Trouble starts when a server rule, CDN or plugin adds a second, conflicting rule, producing chains or loops.
- Fix it with one 301 to the version you serve, then update internal links and your sitemap.
Sources
- Google Search Central blog: to slash or not to slash — Google on trailing slashes making different URLs, and the root exception
- Google Search Central: canonicalization and duplicate URLs — how Google picks one canonical URL when the same content answers at several addresses
- Google Search Central: redirects and Google Search — using a permanent redirect to consolidate on one version
Links last checked August 10, 2026.
Frequently asked questions
Does a trailing slash affect SEO rankings?
The version you pick does not affect rankings. What can hurt is publishing the same page at both addresses with no redirect, because links and signals get divided between two URLs that look like separate pages. Pick one, redirect the other, and the question stops mattering.
What about my homepage?
The root is the exception. example.com and example.com/ are the same URL as far as browsers and search engines are concerned, so there is nothing to fix there. The distinction only appears once there is a path, such as /blog or /blog/.
Should WordPress use trailing slashes or not?
Keep the default unless you have a specific reason to change. WordPress permalinks for posts and pages end in a slash out of the box and it handles the redirect for you. Switching an established site means every indexed URL moves, which is a migration rather than a settings tweak.
Why did adding a trailing slash rule cause a redirect loop?
Almost always two rules disagreeing: one adds the slash, another strips it, so each hands the request back to the other. This often happens when a host or CDN rule meets a WordPress plugin rule. Remove one of them rather than adding a third.