URL Design Principles

URLs are the most overlooked part of web design. People obsess over page speed, conversion rates, and SEO rankings, but then let their CMS generate URLs that look like they were created by a stranger they met on the subway.

I’ve spent years working with publishers, watching editors craft brilliant headlines only to end up with URLs that wrap to three lines and make their content look amateurish before anyone clicks. It doesn’t have to be this way.

Good URLs aren’t just about SEO (though they help). They’re about respect. For your readers, for your content, and for the web itself. A clean URL is a signal that you care about the details. A messy one suggests you don’t.

Here are the rules I follow for creating URLs Some are technical, some are aesthetic, and some are just common sense (imho) that somehow isn’t common enough.

1. Simple-Memorable

The rule: Keep URLs to about 60 characters at most, ideally 3-5 words. Focus on your primary keyword and ruthlessly cut everything else.

Here’s the thing about URLs that most people don’t think about – they’re user experiences waiting to happen (or fail). I’ve seen editors craft brilliant headlines that WordPress converts into URLs longer than a CVS receipt because they’re not thinking about URLs at all. Nobody’s typing that into a browser, and honestly, they probably never will with the short ones either. But still, a long and unwieldy URL is a test your content is failing before anyone even clicks.

We live in a world of copy-paste and QR codes, but when someone sees a URL that wraps to three lines, undermines your credibility. It’s like showing up to a meeting with food stains on your shirt – technically functional, but it undermines what you’re trying to accomplish.

WordPress note: WordPress has a 200-character limit in the database, but that doesn’t mean you should use it. I’ve got a snippet (we’ll talk about that later) that automatically trims auto-generated slugs to something more reasonable.

2. Lowercase

The rule: Use only lowercase letters in URLs. Mixed case creates duplicate content issues and potential broken links.

URLs are case-sensitive after the domain, so example.com/Contact and example.com/contact are different pages. Case sensitivity creates unnecessary complexity and potential for errors. Its adds an extra layer of fragility to your URLs.

But honestly, it just looks bad.

The problem gets worse when you factor in developer mistakes. At some point, someone on your team will mess up case handling in redirects or canonical tags. Mixed case URLs are just asking for trouble down the road.

WordPress reality check: WordPress handles this automatically for slugs, but be careful with custom permalink structures and manually created category names.

3. Hyphens to Separate Words

The rule: Use hyphens to separate words in URLs, not underscores or spaces. Google treats hyphens as word separators; underscores can cause confusion.

URLs can’t contain spaces. Browsers convert them to %20 which looks messy. Underscores are problematic because they’re harder to see when links are underlined.

More importantly, Google’s crawlers identify hyphens as word separators but may not do the same with underscores. This means seo-best-practices is more search-friendly than seo_best_practices.

What to Avoid

4. Skip Unnecessary Elements

The rule: Remove file extensions (.html, .php), excessive periods, and stop words from URLs. They add clutter without adding value.

File extensions made sense when the web was mostly static HTML files, but now they just make you look dated. Nobody needs to know your site runs on PHP or that your blog post is an HTML file.

5. No www Prefix

The rule: Drop the www prefix. It’s 2025, not 1995.

The www prefix is a relic from when we needed to distinguish between web servers and other services on the same domain. Today it just adds four unnecessary characters to every URL and makes your site feel outdated.

That said, there are some technical considerations. Naked domains (without www) can have complications with certain CDNs and SSL certificate management. Most modern providers handle this fine, but it’s worth checking with your hosting setup before making the switch.

6. Avoid IDs

The rule: Don’t include IDs in URLs. URLs should be human-readable, not machine-readable.

The whole point of URLs is that they’re supposed to make sense to humans. IDs are for databases, not for people trying to understand what your content is about.

URLs with exposed IDs like example.com/post/47382/great-article or example.com/content/abc123def are user-hostile. They tell you nothing about the content and they’re impossible to remember or share meaningfully.

Damage Limitation: If you have no choice, or inherit a system that relies on IDs, here are some mitigations to consider: 

  • Put the ID before the slug: 123-article-title not article-title-123
  • If the URL gets truncated, you’ll still have the identifier your system needs
  • Use the shortest possible ID format

WordPress note: The defaults is to use post IDs in URLs, but you can change this in Settings > Permalinks. Choose “Post name” for clean, readable URLs without database cruft.

7. Avoid Verbose Slugs

The rule: Keep slugs to 3-5 words maximum. Remove stop words like “the,” “and,” “for,” and “of” that add length without meaning.

URLs stuffed with unnecessary words look unprofessional and get truncated in search results. Strip out the filler and focus on your primary keyword: example.com/best-seo-practices communicates the same thing as example.com/the-complete-guide-to-best-seo-practices-for-beginners but without the bloat.

Stop words don’t help with SEO and they make URLs longer for no good reason. If you can remove a word without losing meaning, remove it.

WordPress note: WordPress will happily generate URLs from your full headline, no matter how ridiculous. Write “The Complete Beginner’s Guide to Understanding Advanced SEO Techniques for Modern WordPress Websites in 2024” and it’ll create a slug longer than most tweets. The database allows 200 characters, but that’s not permission to use them all.

Structure

8. Meaningful URL Segments

The rule: Every part of your URL should serve a purpose and work as breadcrumbs. Users should be able to remove segments and still find relevant content.

Think of URLs like a file system, each segment should represent a logical hierarchy. If someone lands on example.com/blog/seo/keyword-research they should be able to delete keyword-research and find a useful SEO section, or delete seo and find your main blog.

This isn’t just good UX – it’s how people naturally think about navigation. Power users will edit URLs in the address bar to explore your site structure. Don’t disappoint them with useless segments like /posts/58473/actual-article-title where the middle number serves no human purpose.

9. Use Plural for Collections

The rule: If a URL segment represents multiple items, use the plural form. Collections should be plural, individual items can be singular.

This follows basic logic: if /tag/ shows one tag’s content, what does /tags/ show? It should be all your tags. The hierarchy should make intuitive sense: /categories/ lists all categories, /categories/web-design/ shows posts in that specific category.

Most sites get this backwards with singular collection names that don’t match their function. It’s like having a folder called “photo” that contains hundreds of photos – technically it works, but it feels wrong.

WordPress note: WordPress defaults to singular (/category/, /tag/) which creates this logical inconsistency. You can change this with custom rewrite rules, but be careful about breaking existing links if your site is already established.

10. Skip Trailing Slashes

The rule: Don’t add trailing slashes unless the URL actually represents a directory with sub-content.

I’ve made this mistake myself. Trailing slashes should indicate that there’s more content within that path. If /posts/ shows a list of posts, the slash makes sense. But /posts/article-title/ is misleading – there’s nothing “inside” that article URL.

This is more about semantic correctness than SEO, but it matters for consistency and user expectations. A trailing slash says “I’m a container,” not “I’m a destination.

WordPress note: WordPress adds trailing slashes by default because of its legacy permalink structure designed around date-based navigation (/2025/03/ made sense as a browsable archive). You can remove them by changing your permalink structure, but be careful about SEO implications on established sites.

11. Avoid Date-Based Paths (Usually)

The rule: Don’t include dates in URLs unless they provide meaningful navigation or context. Consider your publishing frequency and reader expectations.

This rule isn’t black and white. If you’re The New York Times publishing multiple articles daily, dates make perfect sense – nytimes.com/2024/03/15/world/article-title lets readers browse chronologically and provides useful context about timeliness. But for most sites, dates just make content feel stale.

There’s a middle ground worth considering: just the year. example.com/2025/best-seo-practices gives readers transparency about freshness without the URL bloat of full dates. It’s honest about when something was written while still feeling more evergreen than a full timestamp.

The Bottom Line

URLs are like typography: when they’re done right, nobody notices them. When they’re done wrong, they undermine everything else you’re trying to accomplish.

Most of these rules boil down to one principle: respect your readers’ intelligence and time. Don’t make them decipher cryptic database IDs. Don’t force them to type underscores or remember random capitalization. Don’t make your content look dated with unnecessary timestamps.

The web is full of sloppy URLs because most people treat them as an afterthought. You don’t have to. A little attention to URL structure signals that you care about craft, and people notice craft even when they can’t articulate why.

Your URLs are working for you or against you. There’s no neutral.

Photo by Martin Woortman