Search documentation

Find pages, sections, and snippets across the Clog docs.

Redirects

Manage workspace redirects — manually, in bulk via CSV, and automatically on every slug change.

The Redirects page is the workspace's redirect table. Each row maps an old path on your consumer site to a new path (or to a 410 Gone / 451 Unavailable). Consumer sites sync the table via the external API and replay redirects locally in their edge or middleware — Clog itself doesn't serve traffic.

You need settings:read or seo:read to view the page and settings:write or seo:write to create, edit, bulk-import, or delete entries.

Where redirects come from

Three sources populate the table:

  1. Auto-301 on slug change. When you change the slug of a published post or page, Clog automatically writes a Permanent301 row from the old slug to the new one — best-effort, so a failure here never blocks the underlying save. Slug changes on drafts don't auto-create redirects because no consumer ever saw the old URL.
  2. Manual entry. Click New redirect to add one yourself. Useful for legacy URLs being migrated, vanity short links, or for marking a page as Gone.
  3. CSV bulk-import. Click Import CSV to upload a batch — handy when migrating from another CMS or seeding from a sitemap diff.

The Redirects page

Open Redirects from the workspace sidebar. Each row shows:

  • From path — the path on your consumer site that the redirect fires on.
  • To path — where the redirect points (a relative /path on your site, or an absolute https://... URL).
  • Type — one of the redirect types below.
  • Hits — how many times consumer sites have reported hitting this redirect (when they bother to report).
  • Last hit — timestamp of the most recent hit.
  • Updated — when the row was last modified.

From the top of the page:

  • Search — case-insensitive substring across fromPath and toPath.
  • Filter — by type.
  • Sort — by createdAt, updatedAt, fromPath, toPath, hitCount, or lastHitAt.
  • New redirect — opens the form drawer.
  • Import CSV — opens the bulk-import dialog.

Create a redirect

Click New redirect. The form has three fields:

FieldFormat
From pathMust start with /. The path on your site (no host). Example: /posts/old-slug.
To pathStarts with / for a same-site target, or http(s)://... for an off-site target. /posts/old-slug/posts/new-slug for a rename; /old-bloghttps://newsite.example.com/blog for a migration.
TypeOne of the five types below. Default: Permanent301.

Save. The new row appears in the list. Consumer sites pick it up on their next sync (see Consumer sync).

Redirect types

TypeHTTPWhen to use
Permanent (301)301The default. "This URL has moved permanently." Search engines transfer ranking signals from the old to the new URL.
Temporary (302)302"This URL is temporarily somewhere else." Search engines keep the old URL indexed. Rarely the right choice — use sparingly.
Temporary (307)307Same intent as 302 but preserves the HTTP method (POST stays POST). Almost never relevant for a content site.
Gone (410)410"This URL was here and is now gone forever." Returns a 410 Gone status — no destination. Use when retiring a page you never want re-crawled.
Unavailable for legal reasons (451)451Like 410 but signals a legal removal (court order, takedown, GDPR right-to-be-forgotten). Returns 451 Unavailable for Legal Reasons.

For Gone (410) and Unavailable for legal reasons (451), the To path field is hidden — these are status-only redirects with no destination.

Validation rules

  • fromPath must start with /.
  • toPath must start with / or http(s)://.
  • fromPath cannot equal toPath (no self-redirect).
  • fromPath must be unique within the workspace. Duplicate creates return a 409 CONFLICT and surface in the form as an inline error.

Edit a redirect

Click a row to open the edit drawer. Same fields, same validation. Changing fromPath re-checks uniqueness; you can't collide with another row.

The Hits counter and Last hit timestamp are read-only — they update from consumer sync reports, not from the dashboard.

Delete a redirect

The Delete action on a row removes it. Confirm in the dialog and the row is gone — there's no undo. Consumer sites stop seeing the entry on their next sync.

Auto-301 on slug change

When you change a published post or page slug, Clog writes a Permanent301 row automatically:

  • fromPath = "/posts/<old-slug>" (or /pages/<old-slug> for a page slug change).
  • toPath = "/posts/<new-slug>".
  • type = Permanent301.

A few important rules:

  • Drafts don't auto-redirect. A draft slug change skips the redirect — no consumer ever saw the old URL.
  • Best-effort. If the redirect write fails (rare), the underlying post / page save still succeeds. The error is logged on the backend, and you'd add the redirect manually from this page.
  • Idempotent. If a redirect for fromPath already exists (because you previously renamed back), Clog leaves the existing row alone rather than overwriting.

If you change a slug back and forth a few times, you may want to manually consolidate the resulting redirect chain — e.g. /posts/a/posts/b and /posts/b/posts/c should become /posts/a/posts/c. Clog doesn't do this automatically; consumers may end up doing two redirect hops in the meantime.

CSV bulk-import

Click Import CSV to upload a batch. Useful when:

  • Migrating from another CMS — export the old → new URL list and import.
  • Seeding from a sitemap diff after a site restructure.
  • Setting up redirects in bulk before launch.

File format

Required header row: fromPath,toPath (with an optional third type column).

fromPath,toPath,type
/old/page,/new/page,Permanent301
/legacy,/blog,Permanent301
/retired,,Gone410
/foo,https://other.example.com/foo,Permanent301

If the type column is omitted, every row defaults to Permanent301.

  • Max file size: 2 MB.
  • Per-row validation runs — invalid rows are skipped, not rejected en masse.
  • Upserts on (workspaceId, fromPath) — re-importing a CSV with an existing fromPath overwrites the destination and type.

Result

The dialog shows a result summary after import:

  • Created — new rows added.
  • Updated — existing fromPaths whose destination / type changed.
  • Skipped — existing fromPaths with identical destination + type (idempotent re-import).
  • Errors — per-row reasons (fromPath must start with /, duplicate within the file, fromPath === toPath, etc.).

Failed rows don't abort the batch — successful rows commit, and the errors list lets you fix the input and re-run.

Consumer sync

Consumer sites pull the table via GET /external/redirects and replay redirects locally in their edge or middleware. The endpoint accepts the same search, type, and pagination filters as the dashboard list. Consumer sites typically run a 5-minute poll and replay locally on every 404.

Full integration walkthrough lives in API → Redirects and link health.

The dashboard tracks the Hits counter and Last hit timestamp from consumer reports. Some consumer sites won't bother to report (and they're not required to). Don't read too much into low counts — they reflect what consumers tell Clog, not what their CDN actually served.

Slug renames on Categories, Tags, and Authors

Slug changes on categories, tags, and authors do not auto-create redirects — the auto-301 system only fires for posts and pages. If your consumer site exposes /categories/<slug>, /tags/<slug>, or /authors/<slug> pages, you'll need to add redirects manually from this page when those slugs change.

Where to next

  • Link health — the inbox of 404s reported by your consumer sites, with a one-click "convert to redirect" action.
  • API → Redirects and link health — the integrator's view of GET /external/redirects and how to wire it into your edge.
  • Posts — slug changes from the post editor trigger the auto-301.

On this page