# 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.

Source: https://seofix.ai/help/fixing-by-template · Category: Fixes · Updated: 2026-10-08

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](https://seofix.ai/help/fix-tasks-and-top-3.md)), 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` |

3. 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](https://seofix.ai/help/verify-fix.md) 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.

## Related

- [Fix tasks and the Top 3](https://seofix.ai/help/fix-tasks-and-top-3.md)
- [Fix prompts](https://seofix.ai/help/fix-prompts.md)
- [Verify a fix](https://seofix.ai/help/verify-fix.md)
