Skip to main content

URL structure follows SEO best practices

ab-001690 · marketing-advanced-seo.technical-seo.url-structure
Severity: lowactive

Why it matters

Numeric-only dynamic routes like /products/12345 pass zero keyword signal to Google — the URL contributes nothing to ranking, and when users share the link on social or paste it in chat, the preview reveals nothing about what they will find. Underscores in slugs merge words into a single token (small_business_seo becomes one indivisible phrase) while hyphens let Google treat each word as a separate match target.

Severity rationale

Low because URL structure is a minor ranking signal compared to title, headings, and content quality.

Remediation

Switch dynamic routes from ID-based to slug-based — rename app/products/[id]/page.tsx to app/products/[slug]/page.tsx and generate slugs from the content title using a slugify helper that hyphenates and lowercases. Rename any route folders using underscores or mixed case.

app/products/[slug]/page.tsx    -> /products/seo-toolkit
app/blog/[slug]/page.tsx        -> /blog/getting-started-with-seo

Detection

  • ID: marketing-advanced-seo.technical-seo.url-structure

  • Severity: low

  • What to look for: Count all routes and enumerate which follow SEO best practices (lowercase, hyphens, descriptive, no underscores, under 75 characters). Examine the routing structure for URL quality issues beyond basic cleanliness (covered in SEO Fundamentals). Look for: (1) URLs with more than 3 path segments that could be flattened, (2) URLs containing only numeric IDs in dynamic routes with no human-readable slug (e.g., /products/12345 instead of /products/product-name), (3) inconsistent URL casing (mixing uppercase and lowercase in route folder names), (4) underscores in URL slugs instead of hyphens (Google treats hyphens as word separators; underscores join words into one token), (5) excessively long URLs (over 100 characters in the path).

  • Pass criteria: URL slugs use hyphens not underscores. Routes use lowercase. Dynamic content routes include a human-readable slug component. URL depth is 3 levels or fewer for most content. At least 90% of URLs should follow best practices with no more than 75 characters per URL path.

  • Fail criteria: URL slugs use underscores. Routes use mixed case. Dynamic content routes use only numeric IDs with no slug. URLs exceed 100 characters.

  • Skip (N/A) when: The project has no content routes — only top-level pages with no dynamic routing.

  • Cross-reference: For breadcrumb schema on hierarchical URLs, see breadcrumb-schema.

  • Detail on fail: "URL structure issues: dynamic product routes use /products/[id] with numeric-only IDs (no slug). Underscore use detected in route folder names. Mixed case detected in route segment names."

  • Remediation: Use slug-based URLs for dynamic content: app/blog/[slug]/page.tsx rather than app/blog/[id]/page.tsx. For slugs generated from content titles, use a slugify function that converts spaces to hyphens and lowercases everything. Rename route folders that use underscores or mixed case to lowercase hyphenated names — for example, rename app/blog_posts/ to app/blog-posts/.

    # Good URL structure in app/ directory:
    app/products/[slug]/page.tsx    -> /products/seo-toolkit
    app/blog/[slug]/page.tsx        -> /blog/getting-started-with-seo
    

Taxons

History