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:
- Auto-301 on slug change. When you change the slug of a published post or page, Clog automatically writes a
Permanent301row 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. - 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.
- 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
/pathon your site, or an absolutehttps://...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
fromPathandtoPath. - Filter — by type.
- Sort — by
createdAt,updatedAt,fromPath,toPath,hitCount, orlastHitAt. - New redirect — opens the form drawer.
- Import CSV — opens the bulk-import dialog.
Create a redirect
Click New redirect. The form has three fields:
| Field | Format |
|---|---|
| From path | Must start with /. The path on your site (no host). Example: /posts/old-slug. |
| To path | Starts with / for a same-site target, or http(s)://... for an off-site target. /posts/old-slug → /posts/new-slug for a rename; /old-blog → https://newsite.example.com/blog for a migration. |
| Type | One 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
| Type | HTTP | When to use |
|---|---|---|
| Permanent (301) | 301 | The 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) | 307 | Same 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) | 451 | Like 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
fromPathmust start with/.toPathmust start with/orhttp(s)://.fromPathcannot equaltoPath(no self-redirect).fromPathmust be unique within the workspace. Duplicate creates return a409 CONFLICTand 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
fromPathalready 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,Permanent301If 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 existingfromPathoverwrites 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/redirectsand how to wire it into your edge. - Posts — slug changes from the post editor trigger the auto-301.