Skip to content

If Your Filters Aren't URLs, Nobody Can Find Them

Filtering by brand, price or category usually changes the page without changing the address. That leaves one indexable page for every combination people search.

Tom Boban · August 27, 2026 · 6 min read

Updated September 21, 2026

On this page

Filtering is the most common interaction on a catalogue site, and one of the easiest to build in a way that quietly costs you every search it should have won. It usually goes like this.

You have a collection: properties, products, cars, courses, cakes. You add a filter bar, because that is what a collection needs. Clicking a brand narrows the list underneath it. Adding a price band narrows it further. It feels right, it demos well, and everybody signs it off.

Now look at the address bar. It says /collection. It said /collection before the click too, and it will keep saying /collection whatever the visitor does next.

Whatever they are now looking at exists only inside their browser. As far as anything outside that browser is concerned, your site has exactly one collection page, and it contains everything.

This is on nearly every e-commerce site, directory, portfolio and property listing we are asked to look at, and it is usually the largest single thing wrong with them.

What that costs

COMPONENT STATEVisitor filtersclicksGrid re-rendersURL unchangedcrawledOne pageunfiltered, genericNothing to link to, nothing to share, nothing narrow enough to match a narrow search.A REAL URLVisitor filtersnavigates/collection/marqueown title and copycrawledA page per facetlinkable, indexablePromote the facets people search for. The rest stay parameters, with a canonical.
The visitor's experience is the same on both rows. The difference is whether the filtered view has an address, and therefore whether anything outside that one browser session can link to it, crawl it, share it or rank it.

There's nothing to rank. Somebody searching for a specific marque, a specific era, a specific category in a specific city is running a narrow search. A narrow search wants a narrow page. You have one broad page, so you're competing on the broad term against everyone, and losing the narrow terms to competitors who did make pages.

A crawler can't click. Googlebot renders JavaScript, so it may see the default state, but it isn't going to work through every combination of your filter bar to discover the rest. Most AI crawlers don't run JavaScript at all, so they see the initial HTML and nothing else. Either way, the filtered views aren't discoverable, because there's no link and no address pointing at them.

Nobody can send anyone there. Somebody finds five cars worth looking at and wants to forward the list. They copy the URL, which is /collection, and the person opening it sees everything. That's a shared link that doesn't work, on every filtered site, every day.

The back button lies. Filter, open an item, press back, and you're on the unfiltered list again. It's the single most annoying thing on the web and it comes from the same root cause.

The fix isn't "make every combination a page"

This is where it goes wrong in the other direction, and it's a worse failure than the first one.

Three filters with ten values each is a thousand combinations. Add a sort order and you've got several thousand near-identical pages, most of them thin, many of them empty. That's the faceted navigation explosion, and it wastes crawl budget on a site that had a handful of pages worth indexing.

So the job is to choose. Promote the facets that people actually search for, and leave the rest as query parameters that don't get indexed.

A rule that has held up for us:

  • One dimension gets a page. Brand, category, city, era. These match real searches and are worth writing for.
  • Two dimensions get a page only where the demand is real. "Brand plus model" usually is. "Brand plus price band plus colour" almost never is.
  • Everything else stays a query parameter, with a canonical pointing back at the one-dimension page it belongs to.

The important half of that is the last line. Query parameters are fine. Query parameters that generate indexable duplicates of a page you already have are the problem, and a canonical tag is how you say which one counts.

A promoted facet has to earn it

A filtered grid with the same heading as the page above it isn't a page, it's a view. If you're going to make a facet indexable, it needs its own title, its own H1, and a couple of paragraphs that are actually about that thing.

That sounds like a lot of writing, and it is, which is exactly why you promote ten facets rather than a thousand. On a specialist car catalogue the ones worth promoting are what a buyer actually searches: the marque, the era, roughly what they are prepared to spend. Each of those has something specific to say on a page of its own. A colour filter does not, and it stays a parameter.

The same mistake wearing different clothes

Once you've seen it, it turns up everywhere:

  • "Load more" buttons where results two through ten only exist after a click. Paginate with real URLs, or render everything if the list is short enough.
  • Tabbed content where each tab's contents are generated on demand. That's the rendering version of this problem, and it's worth keeping the two separate in your head: that one is about whether the text is in the HTML, this one is about whether the view has an address.
  • Maps and store locators where every location is a pin on a canvas and none of them is a page. "Plumber in Streetsville" can't match a pin.
  • Modal detail views that show a product over the top of the list without changing the URL.

The check takes ten seconds. Use your own site the way a customer would, watch the address bar, and notice every point where the content changes and the URL doesn't. Each one of those is something you built that nobody outside the browser can reach.

What nobody can tell you

There is no clean before-and-after traffic chart for this, and you should be wary of anyone showing you one. Sites that get it right tend to get it right at launch, so there is no earlier version to measure against. Sites that fix it later almost always ship several other changes in the same release, so the number belongs to all of them.

What can be said plainly is structural: a filter that's a URL is a page that can be linked to, crawled, shared, ranked and cited. A filter that's component state is none of those things. That holds whether or not somebody can attribute a percentage to it.


Faceted browsing is one of the places where the front-end decision and the search outcome are the same decision, which is most of the reason we do web design and development and AI SEO as one job rather than handing a finished site to somebody else to optimise. If you've got a catalogue, a directory or a listings site where the filters live in JavaScript, that's usually recoverable without a rebuild.

Frequently asked

Why doesn't my filtered product page show up on Google?

Most likely because the filter changes the page without changing the URL. When clicking a brand or price band narrows the list but the address bar still says /collection, that filtered view exists only inside the visitor's browser. Search engines see one broad collection page containing everything, so there's nothing narrow to rank for the narrow searches people run. Competitors who made real pages for those combinations win them instead.

Can Google crawl JavaScript filters on my website?

Googlebot renders JavaScript, so it'll usually see the default state of the page, but it won't work through every combination of your filter bar to discover the rest. Most AI crawlers don't run JavaScript at all and see only the initial HTML. Either way, a filtered view with no link and no address of its own isn't discoverable. If you want it found, it needs a URL.

Should every filter combination on my site be its own page?

No, and going that far is a worse failure than having none. Three filters with ten values each is a thousand combinations, and adding a sort order multiplies that into thousands of thin, near-identical pages that waste crawl budget. Promote only the facets people actually search for, usually one dimension such as brand, category or city, and leave everything else as query parameters with a canonical tag pointing back at the page they belong to.

Should sort order be a separate URL for SEO?

Sort order is never a page. Price ascending and price descending contain the same items in a different order, and indexing both tells a search engine you have two pages of identical content. Keep sorting as a query parameter and make sure the canonical points at the unsorted version of the page it belongs to.

How can I tell if my website's filters are hurting SEO?

The check takes about ten seconds. Use your own site the way a customer would, watch the address bar, and notice every point where the content changes and the URL doesn't. Filters, "load more" buttons, tabs, map pins and modal detail views are the usual suspects. Each of those is something you built that nobody outside the browser can link to, share, crawl or rank.

Sources

  1. Understand JavaScript SEO basics, Google Search Central
  2. How to specify a canonical with rel="canonical" and other methods, Google Search Central

Want this done properly on your site?