Fixing by template

How SEOFix groups URLs into page templates like /jobs/[slug], how templates are detected, and why fixing one template clears thousands of issues.

Updated 8 October 2026View as Markdown

Most SEO issues on a large site come from a few templates, layouts or components that render thousands of pages. SEOFix groups every issue by the URL template of its page (for example /jobs/[slug]), so you change the code that renders that page type once and every page using it is fixed.

Why one change fixes thousands of pages

If /jobs/senior-accountant-dubai, /jobs/sales-manager-abu-dhabi and 4,000 other job pages all miss a meta description, the cause is almost never 4,000 separate mistakes. It is one job page template that has no <meta name="description">. Fix that template, deploy, and the issue is gone from all of them.

That is why fix tasks are one check code on one template (see Fix tasks and the Top 3), and why the agent instructions SEOFix generates tell the agent to find "the template, layout or component that renders the listed URLs" and apply the fix there once.

How templates are detected

A template key is computed from the URL path alone. The query string and fragment are dropped, and empty segments and trailing slashes are ignored.

  1. The first path segment is kept as it is: /jobs, /blog, /about.
  2. Each deeper segment is replaced when it looks dynamic:
The segment is It becomes Example
All digits [id] /orders/48213 → /orders/[id]
A UUID [id] /u/9b2e4c1a-7f3d-4e8b-a1c2-5d6e7f8a9b0c → /u/[id]
A hex hash of 16+ characters with at least one digit and one letter [id] /assets/9f86d081884c7d65 → /assets/[id]
Contains a hyphen, contains a digit, or is longer than 24 characters [slug] /jobs/senior-accountant-dubai → /jobs/[slug]
Anything else kept literally /help/billing → /help/billing
  1. The home page is /.

Single words with no hyphen or digit (such as /company/emaar) stay literal at first. After the crawl, any parent path with 20 or more distinct literal children is collapsed: /company/emaar, /company/nakheel and 18 other single-word children all become /company/[slug]. Top-level paths such as /about are never collapsed.

Examples:

URL Template
https://example.com/ /
https://example.com/pricing?plan=pro /pricing
https://example.com/blog/2024/how-to-hire /blog/[id]/[slug]
https://example.com/jobs/senior-accountant-dubai/ /jobs/[slug]
https://example.com/docs/install /docs/install (until /docs has 20+ single-word children)

Template detection uses URLs only. It does not read your code, so a key is a strong hint at the page type, not a file path. Two page types that share a URL pattern share a template key.

Template-wide issues

An issue is template-wide when the template has at least 5 pages and the issue is on at least 80% of them. These are the issues most likely caused by the template itself.

  • In the report, the "By template" tab groups issues per template, ranked by impact (severity weight × issue count), and marks these issues "Template-wide". Opening one says "Affects nearly every page of <template>: fix the template once and they all clear."
  • The full fix prompt lists them first, under "Fix these at the template level first".
  • The "All issues" tab lists every issue without grouping.

Working with templates

  1. Open the task or the "By template" tab and note the template key, for example /jobs/[slug].
  2. Open two or three of the sample URLs to see the problem.
  3. Find the route, view, layout or component in your codebase that renders that URL pattern. In most frameworks it is the route file for that path, such as a dynamic [slug] route or a CMS template for that content type.
  4. Fix it there. For site-wide problems (robots.txt, sitemap, redirects, CDN rules) change the shared configuration instead.
  5. Deploy, then run Verify fix on the task.

If a template key mixes two page types, fix each type's template; the recheck shows which URLs still fail.

For agents

Action REST API MCP tool
Issues grouped by template GET /v1/crawls/{id}/templates get_templates (top 15 templates, top 5 issues each)
Every issue on one template GET /v1/crawls/{id}/issues?template=/jobs/[slug] (exact key) list_issues with template
Ranked tasks (check code × template) GET /v1/sites/{id}/tasks get_fix_tasks

In get_templates output, template_wide: true means most pages of that type share the issue.

More in Fixes

Still stuck? Email [email protected] with your site and what you expected to see.