URL parameters: how many is too many, and what to do
Every parameter combination is a separate URL to a crawler. squirrel counts the query parameters on each page and names the tracking ones.
What URL parameters cost
A query parameter creates a new URL. Three filters with five values each produce well over a hundred addresses for one listing, and a crawler has no way to know in advance that most of them return near-identical content.
The cost is crawl budget spent on combinations nobody searches for, and index entries competing with each other. Tracking parameters are the simplest case: utm_source and gclid change nothing about the page, so a URL carrying one is a duplicate of the same URL without it, and pointing its canonical at the clean URL is the signal that says so. Canonical selection is still the search engine’s decision, not an instruction it has to follow.
What squirrel checks
The rule runs on every crawled page and reads the query string. It emits up to two checks:
url-parameterspasses when there is no query string. Message:URL has no query parameters. No further checks run.url-parameterswarns above three parameters. Message:URL has 5 parameters (excessive), with each parameter name listed.url-parametersreports info at one to three parameters. Message:URL has 2 parameter(s), with the names listed.tracking-parametersreports info when any parameter name matchesutm_source,utm_medium,utm_campaign,utm_term,utm_content,fbclid,gclid,reforsource, compared lowercased. Message:URL contains tracking parameters, withUse canonical tags to prevent duplicate contentas the value.
Severity for the rule is info and the weight is 3. The threshold of three is fixed and not configurable.
How to fix it
<link rel="canonical" href="https://example.com/shoes" />Point a tracking or otherwise equivalent variant at the clean URL. Parameters that select different content are different pages: ?page=2 gets its own self-referencing canonical, not one pointing at page one.
For faceted navigation, decide which combinations deserve to be indexable. Not linking the rest with crawlable hrefs limits discovery but does not keep them out of the index, because a URL can be found elsewhere. Keeping a URL out of the index takes a noindex the crawler is allowed to fetch and read.
Move content-defining values into the path where they matter: /shoes/running reads better and behaves better than /products?category=shoes&type=running.
| Rule ID | url/parameters |
| Category | URL Structure |
| Scope | Per-page |
| Severity | info |
| Weight | 3/10 |
Enable / disable
Disable this rule
[rules]
disable = ["url/parameters"]Disable all URL Structure rules
[rules]
disable = ["url/*"]Enable only this rule
[rules]
enable = ["url/parameters"]enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.
Related rules
- crawl/canonical-chain: where the canonical for these URLs points.
- url/length: the length parameters usually add.
- crawl/pagination: the parameter pattern that should stay indexable.
- analytics/gtm-present: the tags that generate the tracking parameters.
URL Structure findings ship in every audit next to the SEO, performance and agent experience rules. See Fix SEO issues with AI for how an agent works through a report.
References
- Faceted navigation best practices, Google Search Central
- Consolidate duplicate URLs, Google Search Central
Check your site
Run squirrel audit https://example.com and open the URL Structure section of the report. Each URL is listed with its parameter names and count. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.