Skip to content
AldeaCode Logo
Slug Generator / Ghost Generators 100% local

Ghost CMS slug generator: post handles, redirects, and the Admin API

Ghost generates a slug from the post title the moment you start typing. The slug is editable in the post settings, lives in the URL, and behaves slightly differently from WordPress in ways that matter when you migrate or script bulk edits.

Slugs come from the title and update live

Open a new post in Ghost Admin, type a title, and the slug field under Post settings updates as you type. The conversion drops accents (NFD normalize plus diacritic strip), lowercases, replaces whitespace with dashes, and drops anything that is not alphanumeric or a dash. Numbers are preserved.

Once you stop editing the title, the slug field stops auto-updating. From that point any further title edits leave the slug alone. This is closer to Shopify than WordPress: the URL is decided early and stays stable, which is friendly to SEO but unforgiving of typos.

If you want a slug that does not match the auto-generated one, click the slug field in Post settings and overwrite it. The field accepts the same character set the slugifier produces, so anything you paste gets normalized on save.

Accent and unicode behavior

Ghost runs a stricter normalization than some platforms. A title like Cรณmo posicionar tu blog en 2026 produces como-posicionar-tu-blog-en-2026 reliably. Non-Latin scripts (Cyrillic, CJK, Arabic) get transliterated when possible, dropped otherwise. The result is always ASCII-safe.

This is good news for portability across hosting and CDN edges that misbehave with percent-encoded paths. It is bad news if you are running a non-English-language blog and want the original script in the URL: Ghost simply will not let you, and there is no setting to opt out. If your audience expects native-script URLs, the slug field accepts hand-typed unicode and Ghost will percent-encode it at request time, but you lose the auto-suggestion and have to type each one.

Numbers survive without modification, which is handy for date-based slugs (2026-roundup) and version-style identifiers (v2-launch).

Changing slugs after publish

Ghost has a setting under Settings, Labs (or Settings, Advanced in newer versions) for slug change redirects. When enabled, editing a published post's slug creates a redirect from the old URL to the new one. The redirect is a 301 and is served by Ghost itself, no Nginx config needed.

If the setting is off (the default in older versions), the old URL returns 404 the moment you save the new slug. Inbound links break, the sitemap updates on next regeneration, and Google notices. Always check that setting before doing slug surgery on a live blog.

For migrations from WordPress, the Ghost migration tool tries to preserve slugs as-is when the source slug is already ASCII-safe. If your WordPress slugs contain accented characters because of an older plugin, expect them to be re-normalized on import. Plan a redirect map ahead of time.

Bulk edits via the Admin API

For batch slug changes (rebrand, taxonomy cleanup, migration), the Ghost Admin API exposes the slug field on posts and pages. Authenticate with an Admin API key, fetch the post, set the new slug, and PUT it back. The API runs the slug through the same normalizer, so you can pass a clean string and trust the round-trip.

# Pseudo-flow with curl. Use the Admin SDK in production.
TOKEN=$(node sign-jwt.js)
curl -X PUT https://example.com/ghost/api/admin/posts/POST_ID/ \
  -H "Authorization: Ghost $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "posts": [{ "slug": "new-clean-slug", "updated_at": "..." }] }'

The updated_at in the body must match the server's value to prevent overwrite races. Ghost rejects the request with a conflict error if another editor saved the post in the meantime. Build retries into any bulk script.

Working example

json
{
  "posts": [
    {
      "id": "63f4a2b1c0e5d6f7a8b9c0d1",
      "title": "Cรณmo posicionar tu blog en 2026",
      "slug": "como-posicionar-tu-blog-en-2026",
      "status": "published",
      "visibility": "public",
      "feature_image": null,
      "created_at": "2026-05-08T10:14:00.000Z",
      "updated_at": "2026-05-10T08:00:00.000Z",
      "published_at": "2026-05-09T12:00:00.000Z",
      "url": "https://example.com/como-posicionar-tu-blog-en-2026/",
      "primary_tag": {
        "name": "SEO",
        "slug": "seo"
      },
      "primary_author": {
        "name": "Aldea",
        "slug": "aldea"
      }
    }
  ]
}

Just need the result?

When you are planning a content calendar in a spreadsheet and want Ghost-compatible slugs ready in advance, the slug generator at aldeacode.com applies the same NFD normalize and ASCII-strip as Ghost itself. Paste a list of titles, copy back a list of slugs, paste each into the Post settings slug field at draft time. No accidental late renames, no surprise 404 windows.

Open URL Slug Generator โ†’

Frequently asked questions

Does Ghost auto-update the slug when I rename a published post?

No. Auto-update only runs while the slug field has not been manually edited and the post is in draft. Once published or once you touch the slug field, the slug stays put unless you change it explicitly.

Can I keep accents or non-Latin script in a Ghost slug?

Not via the auto-generator. The default normalization strips diacritics and transliterates non-Latin scripts. You can hand-type unicode into the slug field and Ghost will percent-encode it at request time, but the suggestion engine will not produce it.

Do old slugs redirect after I change them?

Only if the slug change redirects setting is enabled, under Settings Labs or Advanced depending on version. With it off, the old URL returns 404 immediately on save. Always confirm the setting before bulk slug edits.