# routes.json

The merchant's URLs.

## `landing`

string

Where a search lands when its query names a page and nothing is left as text, such as "graues sofa". Default: `category`.

- `category`: On the merchant's page for what the query named: the category's page with the query's filters chosen, or the brand's page when it names only a brand. The page brings its merchandising and its URL.

- `search`: On the search page, with the category and the filters as chips.

## `search`

string or map of strings

The search page's path, per locale where it differs, such as `/suche` or `{ "de": "/suche", "en": "/search" }`. Default: `/search`.

## `filter_pages`

object

The filter states that get a path of their own, such as `/wohnen/sofas/farbe--grau/`: a category with one value of each facet of a listed combination. Every other filter state is the category with parameters. Default: none.

The combinations of facets whose values a path holds, and how a path spells them. A segment is the facet's parameter name, the separator and the value's slug, such as `farbe--grau`, and the segments follow the category's path in the order of `facets`, whatever order the shopper chose them in.

- `facets` (array of strings · required): The facets a path may hold, in the order of their segments: options, their groups, and the brand. `["brand", "gender", "material"]`

- `combinations` (array of arrays of strings · required): The combinations that get a path, each one to three of `facets`, with one value of each. `[["brand"], ["gender"], ["brand", "gender"]]`

- `before_category` (map of (string or map of strings)): One facet whose value stands before the category's path under a fixed word, as brand pages do, per locale where it differs: `{ "brand": "marken" }` writes `/marken/arcteryx/outdoor-jacken/`. Default: none.

- `separator` (string): What joins a segment's parameter name and the value's slug. Default: `--`, which no slug holds, so `-` stays possible for a shop whose URLs read `color-red`.

## `min_products`

integer · at least 1

The fewest products a filter page shows to be indexed; with fewer it is `noindex`. Default: 4.

## `trailing_slash`

string

Whether a page's path ends in a slash. Default: `as_written`, each path as the catalog writes it.

- `as_written`: Each path as the catalog writes it.

- `always`: Every path ends in a slash: `/wohnen/sofas/`.

- `never`: No path ends in a slash but the root: `/wohnen/sofas`.

## `parameters`

map of (string or object)

The query parameters whose names differ from their codes, by code: a facet's field, such as `color`, or one of the reserved `q`, `page`, `sort`, `from`, `ignore` and `redirect`. Every other parameter is named by its code; a range is the name with `.gte` and `.lte`, such as `price.gte`. `{ "color": "farbe", "q": { "name": "suche", "aliases": ["query"] } }`

- `name` (string): The name URLs are written with. Default: the code.

- `aliases` (array of strings): Further names a URL may use, read as this parameter and written as its name.

## `$schema`

string

The JSON Schema an editor checks this file against; kept as written.

## Example

```json title="tests/fixtures/home/routes.json (trimmed)"
{
  "$schema": "../../../contracts/schema/routes.json",
  "search": { "de": "/suche", "en": "/en/search" }
}
```

**Guide:** [routes.json](/docs/urls#routesjson)
