Key Takeaways
- Use hyphens to separate words in slugs —
page-title-here, notpage_title_here(underscores are treated as word joiners by Google, not word separators;page_titleis read as one tokenpagetitle) - Keep slugs concise and keyword-focused — remove stop words (a, the, of, for) that add no relevance signal:
/blog/how-to-check-broken-links/beats/blog/how-to-check-for-broken-links-on-your-website/ - URL depth should match content importance — homepage (depth 0), category pages (depth 1), posts (depth 2); going beyond 3 levels signals lower importance to crawlers
- Trailing slashes should be consistent — pick one convention (
/page/or/page) and canonicalise the other with redirects; both are acceptable, but inconsistency creates duplicate content - Never change URLs for the sake of it — every URL change requires a 301 redirect, and even a perfect 301 may temporarily drop rankings; the SEO cost of migration must be outweighed by the benefit of the new URL structure
Slug Best Practices
A slug is the URL component that identifies the specific page — in /blog/url-structure-seo-guide/, the slug is url-structure-seo-guide. Slugs are the part of the URL you control most directly, and the part most likely to carry keyword weight.
Rules for clean slugs:
- Lowercase only:
/Blog-Postand/blog-postare different URLs. Use lowercase consistently to avoid duplicate content from capitalisation variants. - Hyphens for word separation:
url-structure-seonoturl_structure_seoorurlStructureSeo. Google explicitly confirmed that hyphens are treated as word separators; underscores are word joiners. - Remove stop words:
how-to-check-broken-linksnothow-to-check-for-broken-links-in-your-website. Stop words (for, in, the, a, on, your) add URL length without adding relevance signal. - Include the primary keyword: The slug should contain the page's main keyword naturally — not forced repetition, but the central topic phrase.
- Avoid dates in post slugs unless the date is the primary identifier.
/blog/2024/06/post-titlemakes the post appear dated and harder to repurpose;/blog/post-title/is evergreen. - Keep it short: Under 60 characters; under 40 is better. Long slugs get truncated in search results and are harder to share.
Good slugs: /seo-site-audit/, /javascript-seo-guide/, /link-checker/
Bad slugs: /post?id=1234, /category/subcategory/2026/06/the-ultimate-guide-to-seo-in-2026/, /seo_guide_v2_final
URL Hierarchy and Depth
URL depth signals content importance to crawlers. Googlebot prioritises pages it can reach in fewer clicks from the homepage — a page at depth 2 is assumed to be more important than a page at depth 5, all else being equal. Crawl budget is also a factor: very deep pages may be crawled less frequently.
Recommended hierarchy:
domain.com/ → Homepage (depth 0)
domain.com/blog/ → Category/section (depth 1)
domain.com/blog/post-slug/ → Individual post (depth 2)
domain.com/tools/link-checker/ → Tool page (depth 2)
Avoid going beyond depth 3 for important content. If your blog posts live at /blog/category/subcategory/post-slug/ (depth 4), consider flattening the structure. The category taxonomy can be represented with internal linking and breadcrumb navigation rather than URL depth — you get the structural benefit without burying content.
One exception: large e-commerce sites with genuine category hierarchies (department → category → subcategory → product) may need depth 4. In these cases, use breadcrumbs and strong internal linking to offset the depth penalty.
Category Slugs and Folders
Use category or section folders when they add meaningful context for both users and crawlers:
/blog/post-slug/— simple, works well for a single-topic blog/tools/link-checker/— the/tools/folder groups all tools logically and signals the page type/blog/seo/post-slug/— use only if the category adds meaningful context and you have multiple distinct, well-populated categories
Avoid category slugs that are too generic or stack too many levels:
/articles/general/news/uncategorized/post-slug/— too deep, too generic/resources/— acceptable for a resource library, but make sure the category pages themselves are indexable and have content
Empty or thin category pages (a folder slug that returns a nearly empty listing) can dilute crawl budget and pass equity to pages that haven't earned it. If you use category folders, ensure each category page has sufficient content — a description, featured posts, and internal links.
Trailing Slash Consistency
Both example.com/page/ and example.com/page are valid URLs. The problem arises when both versions serve content without one redirecting to the other — that creates a duplicate content issue, and the link equity to both versions doesn't consolidate.
Pick one convention:
- Trailing slash (
/page/): WordPress default; slightly more common for CMS-based sites. Traditionally signals a directory rather than a file. - No trailing slash (
/page): Common for static site generators (Jekyll, Hugo, Eleventy) and most SaaS or tech-oriented sites.
Enforce your choice with:
- 301 redirects from the non-preferred version to the preferred version at the server or CDN level
- Canonical tags on every page pointing to the preferred version
- Internal links always using the same format — mixed internal linking creates redirect chains at scale
The Redirect Tracer can quickly verify whether both versions of a URL are handled correctly. If yourdomain.com/page and yourdomain.com/page/ both return HTTP 200 without one redirecting to the other, you have a duplicate content problem that canonicals alone may not fully resolve.
URL Parameters
URL parameters (?sort=price&category=shoes) are one of the most common sources of duplicate content at scale:
example.com/products/andexample.com/products/?sort=priceare the same page with identical contentexample.com/products/?page=2is a paginated variant that may contain overlapping content- Session IDs and tracking parameters (
?sessionid=abc123,?utm_source=email) create a new URL for every user
Parameter handling strategies:
- Canonical tags: On all parameter-variant URLs, add a canonical pointing to the base URL (e.g.,
/products/). This is the minimum — it consolidates ranking signals without removing the parameter pages from the crawl queue. - robots.txt disallow: Block non-essential parameter variants to preserve crawl budget. Use
Disallow: /*?sort=to block all sort-parameter variants. Be careful with wildcards — test thoroughly before deploying. - Hash fragments for UI state: Where possible, move filter and sort state to hash fragments (
#sort=price) rather than query parameters. Hash fragments are ignored by crawlers entirely — they never become separate URLs in the index.
/page?p=2 is less crawlable than /page/2/. If you must use parameters for pagination, use canonical tags on paginated variants pointing back to the first page only when pages contain fully duplicate content — do not canonical paginated pages that contain unique content to page 1.
Changing URL Structure — Migration Risks
Every URL change requires a 301 redirect from old to new. Even with perfect redirects, expect:
- Temporary ranking fluctuation — days to weeks as Google re-crawls, re-processes, and re-associates inbound links with the new URL
- Risk of redirect chains — if old redirects weren't cleaned up before the migration, you may create A → B → C chains that dilute link equity
- Broken external backlinks — third-party sites linking to your old URLs won't automatically update; you can only hope they follow the redirect
- Internal link rot — any internal links pointing to old URLs go through an extra redirect hop; update them to point directly to the new URLs
When a URL change is worth the disruption:
- The current URL is genuinely harming performance — keyword-stuffed, very long, contains session IDs, or has underscores as word separators throughout
- A site rebrand requires a domain change
- The current URL structure is creating significant crawl budget waste (thousands of parameter variants being crawled)
When to leave URLs alone:
- The page is already ranking well — do not touch a URL that is earning traffic, even if the slug isn't perfect
- The benefit of the new URL structure is marginal — removing one stop word from a slug rarely moves rankings
- You don't have bandwidth to implement redirects, update internal links, and monitor recovery over the following weeks
After any URL restructure, run the Link Checker on your domain to find internal links that weren't updated to point to the new URLs — every internal link still pointing to an old URL is an unnecessary redirect hop that slightly dilutes link equity and slows crawls.
Check Your Site for Redirect Chains and Broken URLs
Free, no signup. The Redirect Tracer follows every hop in a redirect chain and shows the full path — essential for auditing URL migrations and finding redirect chains that are losing link equity.
Try the Redirect Tracer Free →Affiliate disclosure: Some links on this page may be affiliate links. We only mention tools we've personally used and have an honest opinion about. Affiliate revenue helps keep ByteWaveNetwork's tools free and maintained. We are not paid by any of the tools compared in this article for favorable coverage.