In a CMS, content changes constantly: titles get improved, sections get reorganized, and teams merge duplicate pages. If your URLs change every time the content changes, users hit dead ends and internal links rot over time.
“Stable URLs” is less about picking the perfect slug once and more about having a predictable system for when slugs change, how redirects are created, and who is allowed to do what. The goal is boring reliability: old links keep working, analytics stays readable, and editors are not afraid to improve content.
This post outlines a practical way to design URLs, set slug rules, and handle content moves without building a complicated platform. It is CMS-agnostic, so you can adapt it whether you use a headless CMS, a traditional one, or a custom admin.
Why URL stability matters
URLs are part of your product interface. People bookmark them, share them in chat, paste them into documentation, and save them in tickets. When a URL breaks, the user rarely blames the URL design. They blame the site.
Stability also matters internally. Marketing teams build campaigns around landing pages. Support teams send links to help articles. Engineers reference runbooks. A stable URL system reduces coordination overhead because fewer teams need to be notified when something moves.
Finally, stable URLs protect the long-term value of your content. Even if you do not care about search indexing, you likely care about maintaining the utility of evergreen pages over time. Redirects are the safety net, but they work best when you need them rarely and manage them intentionally.
Choose your URL shape on purpose
Before setting rules, decide what your URLs represent. The most common mistake is letting the URL accidentally mirror your CMS navigation or folder structure. Navigation changes more often than the core identity of a page.
Two workable patterns cover most sites:
- Flat, identity-based URLs:
/guides/backup-retention/. The slug is tied to the page’s identity and does not include category hierarchies that are likely to change. - Shallow, semantically grouped URLs:
/docs/backup/retention/. Keep depth low and avoid “organizational” levels that get renamed during redesigns.
Whichever pattern you pick, treat the URL as a public identifier. If you want the freedom to reorganize sections, prefer fewer path segments and avoid embedding dynamic taxonomy like “industry” or “team” unless it is truly stable.
Slug governance rules editors can follow
Slug governance is a blend of product policy and CMS configuration. The policy should be short enough to paste into your editor handbook. The configuration should make it hard to violate the policy accidentally.
Separate title from slug
Editors should be able to change a title without changing the URL. If your CMS auto-regenerates slugs from titles, disable that behavior after initial publish, or add a “lock slug after publish” rule.
A good mental model is: the title is for humans scanning a page, while the slug is a stable handle. Often the two start the same, then diverge as the title gets refined.
A copyable slug checklist
Use this as a lightweight standard for editors and reviewers:
- Use lowercase, words separated by hyphens.
- Avoid dates unless the content is inherently date-based (for example, annual reports).
- Prefer 2 to 6 words. Short, but descriptive.
- Avoid internal jargon. Use terms that appear in the content itself.
- Do not include version numbers unless versions must coexist.
- After publish: change the slug only if the old slug is actively harmful or misleading.
- If you change the slug: create a redirect from the old URL to the new one.
To make this stick, add a small “URL policy” line in your CMS UI near the slug field and include it in content review checklists.
Redirects that stay manageable
Redirects are necessary, but unmanaged redirects turn into a maze. The goal is not “never change a URL.” The goal is “when a URL changes, the redirect is correct, traceable, and does not create long chains.”
Treat redirects like content, not code
For many teams, the simplest approach is to store redirects in a small dataset that non-engineers can edit with guardrails. Whether it lives in your CMS, a spreadsheet import, or a small admin tool, it should have the same basics: validation, ownership, and a review step for risky changes.
Conceptually, a redirect record can be as simple as this:
{
"fromPath": "/docs/retention-policy/",
"toPath": "/guides/backup-retention/",
"status": 301,
"reason": "Merged duplicate docs pages",
"owner": "content-ops"
}
This structure is useful because it makes intent explicit. It also enables checks, like preventing loops and avoiding duplicate “from” entries.
Redirect hygiene rules
- Prefer one hop: old URL should redirect directly to the current URL, not to an intermediate URL.
- Standardize status codes: use permanent redirects for permanent moves. Avoid mixing without a reason.
- Block redirect loops: validate that
fromnever equalsto, and that the target does not route back. - Document why: a short reason prevents repeated churn and helps audits later.
- Set ownership: someone should be able to answer “who changed this and why?”
Even if your CMS supports “URL history” automatically, you still benefit from a periodic audit. Redirects are a dependency. Treat them as such.
Safe content moves: a concrete example
Consider a hypothetical small SaaS company with a help center and a blog. Over time, they published overlapping articles: one titled “Data Retention Policy” under /docs/, and another titled “How Long We Keep Backups” under /blog/. Support links to the docs page, while marketing links to the blog post.
The team decides to create a single evergreen guide under /guides/backup-retention/. Here is a safe move plan that does not break old links:
- Pick the destination URL once and treat it as the canonical URL for the topic.
- Publish the new guide first, so the destination exists before redirects are enabled.
- Add redirects from both old pages to the new guide.
- Update internal links in navigation, related content modules, and templates to point to the new guide.
- Leave a short note in the CMS on the old entries (if they remain as stubs) explaining the merge.
- Monitor for stragglers using your logs or a simple report of 404s and redirected hits.
The key is sequencing and documentation. Publish first, redirect second, then clean up links. If you do it in the opposite order, you create windows of brokenness that are hard to notice unless you test every path.
Common mistakes to avoid
- Coupling URLs to navigation labels: “Resources” becomes “Learn” and suddenly every URL changes. Navigation can change without changing identity.
- Auto-updating slugs after publish: “fixing the title” quietly changes the URL, and nobody notices until links break.
- Redirect chains: page A redirects to B, then later B redirects to C. Chains slow requests and complicate debugging.
- Redirecting everything to the homepage: it avoids a 404 but creates a confusing user experience and hides problems.
- No redirect ownership: if nobody owns redirects, nobody cleans them up, and the set grows without control.
A good rule is that any URL change should be as reviewable as a content change. If your team already has an editorial review step, integrate slug and redirect review into that workflow.
When not to do this
Stable URL systems can be overbuilt. You do not need an elaborate redirect database and governance process for every site.
Consider keeping it simpler if:
- You publish a small, static set of pages that rarely changes.
- Your CMS already provides “URL history with automatic redirects,” and you do not have multi-team editing.
- You are prototyping a product and still deciding what content you will keep long-term.
Even then, the basics still apply: separate title from slug, avoid auto-changing URLs after publish, and keep redirects from forming chains. Lightweight rules often deliver most of the benefit.
- Design URLs to represent content identity, not your current navigation or org chart.
- Lock or decouple slugs from titles after publish so routine edits do not change URLs.
- Use redirects intentionally: one hop, no loops, documented reasons, and clear ownership.
- For merges and reorganizations, publish the new destination first, then redirect, then update internal links.
Conclusion
Stable URLs are a quiet form of operational excellence. They reduce broken links, make content safer to improve, and prevent small site reorganizations from becoming cross-team emergencies.
Start with a clear URL shape, a short slug policy editors can follow, and redirect hygiene rules that prevent chaos. If you do those three things well, most “URL problems” stop being problems.
FAQ
Should we ever change a slug?
Yes, but do it deliberately. Change a slug when the old URL is misleading, harmful to clarity, or conflicts with a long-term content plan. When you change it, add a redirect and update internal links to reduce dependence on the redirect.
What if two pages want the same slug?
Pick one canonical page for the topic and give it the clean slug. Give the other page a distinct slug that reflects its role (for example, an overview versus a how-to), or merge the pages and redirect the non-canonical URL.
How long should we keep redirects?
For evergreen content, treat redirects as long-lived. If you must retire them, do it only after you have evidence that the old URL no longer receives meaningful traffic and is not referenced in important internal documentation.
Should taxonomy like category be in the URL?
Only if the taxonomy is stable and meaningful to users. If categories are mainly for editorial organization and likely to change, keep them out of the URL and use them for navigation and filtering instead.