Serving pages, 404s and URL conflicts
5 min read
How a request is handled
A generated page has no post, so the plugin takes over only when WordPress found nothing for the address (pre_handle_404). That has three consequences:
- Real content always wins. A normal post, page, term archive or author archive on the same URL is shown instead of a generated page.
- Normal requests cost nothing. The plugin does a single database lookup only on requests that would otherwise be a 404 (and skips even that when no page exists at all).
- No rewrite rules and no permalink flush are needed for generated pages. They need pretty permalinks (any structure except Plain); with Plain permalinks WordPress treats unknown addresses as the home page, which the plugin never replaces.
The plugin never answers search results, feeds, embeds, trackbacks, robots.txt, favicons, the blog home, pages with a page number (/page/2/) or an existing term/author/post type archive, even when empty.
The URL of the request is cleaned like generated URLs (lowercase, accents and symbols as in a WordPress slug), so /guides/LYON and /guides/lyon/ are the same page, with or without the trailing slash. The canonical URL is always the clean form of the generated path.
What each kind of page answers
Page status (shown in the pages list) | Answer for visitors and crawlers |
|---|---|
Live |
|
Hidden (you hid it) |
|
Removed (its row disappeared or no longer matches the filters) |
|
Converted | A |
URL in use (shadowed) | Not served: the real content on that URL is shown. See below. |
Moved (not listed; the old URL of a page whose URL changed) |
|
No page at all | The normal |
The setting for removed pages is in the task, step Search engines, Canonical and removed pages › When a row is deleted from the data:
- Answer “410 Gone” so search engines drop the page quickly (default), or
- Redirect visitors to the parent path.
Redirects are 301. Redirect targets on other hosts are only followed for the domains of your language variants (Business).
When real content uses the same URL
Suppose a task generates /guides/zurich/ and later an editor publishes a real page with that slug. Both exist, and the real page wins immediately (even before the next run).
At the next run the plugin finds the clash and marks the generated page URL in use:
Where | What you see |
|---|---|
Run counters | "shadowed" |
Task card | "1 page offline: WordPress content uses its URL." |
Notice of the run | "1 page is not shown because WordPress content already uses its URL." (badge Waiting) |
Pages list | Status URL in use (filter All statuses › URL in use) |
SEO health | "1 page is never shown because a WordPress post, page or archive uses its URL. Change the task’s URL pattern or that content’s slug." |
URL step preview | "An existing post already uses this URL; it will be shown instead." |
A shadowed page is not counted against the page limit, is left out of sitemaps, is not written by AI and is not converted. When the real content is deleted or its slug changes, the next run turns the page live again (it needs a free slot of your page limit to do so).
What counts as real content: published posts, pages and custom post type items of public types, term archives, post type archives and author archives. Drafts, private and trashed content do not block a URL.
To resolve a clash change the URL pattern of the task (add a parent path), or change the slug of the real content. In the page editor you cannot set a URL that real content uses ("A WordPress post, page or archive already uses this URL.").
When two generated pages clash
If two rows resolve to the same URL, the first row keeps it and the others get no page. The run counts them as conflicts: "1 row skipped: another generated page uses its URL." Make the URL unique (URL and title patterns). Two tasks that produce the same URL work the same way: the page that already exists keeps the URL. In the page editor, setting a slug another generated page uses is refused with "Another generated page already uses this URL."
Caches
A page cache may keep a copy of a generated page. The plugin asks the caches it knows to clear after runs, edits and conversions; see Freshness and caches. Pages answering 404, 410 and 301 are not special for caches: if you hide or remove a page and still see the old version, clear the cache.
The template page itself
The template is a real page and answers 200 at its own URL, with noindex, nofollow and without a sitemap entry. Keep it a draft or private to hide it; see Templates and field values.
When the plugin or the license is gone
- Deactivating the plugin stops serving; pages are kept in the database and come back when you activate it again.
- An expired license keeps serving for a 14-day grace period, then answers 404; see Limits and plans.
- A multilingual plugin that was deactivated keeps language pages serving; the next run stops with a notice and removes nothing (Multilingual pages).
Still stuck? Contact support