Skip to main content
Beta: Front-End Checklist is currently in beta. Some issues are still being fixed. Thanks for your patience.
SEOMedium

Use lowercase URLs

Checks that URLs are lowercase

Utilities
Quick take
Typical fix time 10 min
  • URLs should be entirely lowercase to prevent duplicate content issues
  • Most web servers treat /Page and /page as different URLs, creating duplicates
  • Redirect uppercase and mixed-case URLs to their lowercase equivalents with 301
  • Apply lowercasing in your server config or framework router, not ad hoc
Why it matters: Mixed-case URLs can create duplicate content—search engines may index both /Product and /product as separate pages, splitting link equity and diluting rankings.

Rule Details

URL paths on the web are case-sensitive by specification in RFC 3986 (opens in new tab). While many servers normalize case for you, inconsistent casing creates duplicate pages that split PageRank and often needs the same cleanup plan as canonical URL consolidation.

Code Example

On Linux servers (used by most web hosts), /Products and /products are genuinely different URLs. Both may be served, indexed separately, and compete against each other:

https://example.com/Products/shoes     → 200 OK  ← duplicate
https://example.com/products/shoes     → 200 OK  ← canonical-url

Even on Windows/macOS (case-insensitive), Googlebot treats them as separate URLs.

Why It Matters

Mixed-case URLs can create duplicate content. Search engines may index both /Product and /product as separate pages, splitting link equity and diluting rankings, which is why Google's URL structure best practices (opens in new tab) still recommend simple, normalized paths.

Correct Pattern

✅ https://example.com/products/running-shoes
✅ https://example.com/blog/how-to-pick-shoes
✅ https://example.com/about-us
 
❌ https://example.com/Products/Running-Shoes
❌ https://example.com/Blog/How-To-Pick-Shoes
❌ https://example.com/About-Us

Server-Level Fix

Nginx:

# Redirect uppercase URLs to lowercase
if ($uri != $uri_lower) {
  rewrite ^(.*)$ $uri_lower permanent;
}

Apache (.htaccess):

RewriteEngine On
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

Framework-Level Fix

Next.jsnext.config.js:

module.exports = {
  async redirects() {
    return [
      {
        source: '/Products/:path*',
        destination: '/products/:path*',
        permanent: true,
      },
    ]
  },
}

Express.js middleware:

app.use((req, res, next) => {
  const lower = req.path.toLowerCase()
  if (req.path !== lower) {
    return res.redirect(301, lower + (req.search || ''))
  }
  next()
})

After enforcing lowercase URLs, audit with Screaming Frog (opens in new tab) or an equivalent crawler:

  1. XML sitemap entries — all <loc> values must be lowercase
  2. Internal <a href=""> links — update any uppercase links
  3. Canonical tags — <link rel="canonical"> must match the lowercase URL
Don't break existing URLs

If uppercase URLs currently have inbound links or are indexed, implement 301 redirects before removing the old URLs. Dropping uppercase URLs without redirects destroys existing link equity.

Exceptions

  • Staging, utility, login, account, or internal search pages may intentionally use different crawl or index signals if they are not meant to rank.
  • Temporary migration states can produce noisy intermediate signals; flag the live production URL pattern, not one-off transition artifacts.
  • When redirects, canonicals, robots directives, or indexability signals conflict, fix the strongest final signal first instead of reporting every downstream symptom as a separate blocker.

Standards

  • Use these references as the standard for the final search-facing HTML, metadata, and crawl behavior.
  • Check the implementation against Google Search Central: URL structure best practices before treating the rule as satisfied.
  • Check the implementation against RFC 3986: URI syntax — case normalization before treating the rule as satisfied.

Verification

Automated Checks

  • Inspect rendered HTML and HTTP headers to confirm the expected metadata or crawlability signal is present.
  • Test the affected URL with Google Search Console or equivalent tooling where relevant.
  • Re-crawl a representative page set after deployment.

Manual Checks

  • Confirm the change does not create conflicting canonical-url, robots, or structured-data signals.

Use with AI

Copy these prompts to use with your AI assistant, or install the MCP server to use directly from Claude, Cursor, or Windsurf.

Check

Verify implementation

Scan the site's internal links and server-side routes for URLs containing uppercase letters. Check HTTP response codes for uppercase variants of key URLs to confirm whether they redirect (301) to lowercase.

Fix

Auto-fix issues

Configure your server or framework to normalize all incoming URLs to lowercase before routing. Add 301 redirects from any existing uppercase URLs to their lowercase equivalents. Update internal links and sitemaps to use only lowercase URLs.

Explain

Learn more

URL case matters for SEO because case-sensitive servers treat /Page and /page as different resources, creating duplicate content. Even on case-insensitive servers, inconsistency confuses crawlers and splits PageRank across URL variants.

Review

Code review

Scan the site's route definitions, server configuration, and internal links for uppercase letters in URL paths. Test key URLs in uppercase and mixed case — verify they return 301 to the lowercase version, not 200. Check the sitemap for any uppercase <loc> entries. Verify framework router is configured to normalize URL case.

Sources

References used to support the guidance in this rule.

Further Reading

Tools and supplementary material for exploring the topic in more depth.

Screaming Frog SEO Spider Website Crawler

The industry leading website crawler for Windows, macOS and Ubuntu, trusted by thousands of SEOs and agencies worldwide for technical SEO site audits.

Screaming FrogGuide

Rules that often go hand-in-hand with this one.

Set canonical URLs for all pages

A canonical URL tag is present to prevent duplicate content issues.

SEO
Avoid multi-hop redirect chains

Detects multi-hop redirect chains that waste crawl budget

SEO
Use trailing slashes consistently

Checks for consistent trailing slash usage across all URLs to avoid duplicate content and canonicalization issues.

SEO
Resolve internal broken links

Detects and fixes internal links that return 404 or 5xx errors to improve user experience.

SEO

Was this rule helpful?

Your feedback helps improve rule quality. This stays internal for now.

Loading feedback...
0 / 385