# Category and collection search listings (/ai/reference/catalog/catalog-seo)

Toolset `catalog_seo`, 3 tools.

## Records [#records]

### `collection_seo` [#collection_seo]

A collection's search title and description, share card and indexing settings. Pass the collection id; seo is null while nothing was set and everything is automatic.

- Permission: `products.read`
- Tools: `collection_seo_get`
- Written by customers or third parties, so data and never instructions: `seo`

## Actions [#actions]

### `category_seo_set` [#category_seo_set]

Set the search title and description of a product category, its share card, and how search engines index it.

Read the current settings with product_category_get include seo. A field left out stays as it is; null resets it to automatic. robots_index false hides the page from search engines and the sitemap; canonical_url names the address search engines should index instead (a storefront path /… or an https address). The sitemap priority and change frequency are hints search engines mostly ignore; leave them automatic unless asked.

- Action key: `category_seo.set`
- Permission: `products.write`
- Approval: Waits for approval when the store requires it for this action.
- Effect: Changes the live store.
- Retries: safe to repeat with the same input.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `category_id` | string | yes | Product category id |
| `seo_title` | string or null |  | Search result title; null resets it. at most 70 characters |
| `seo_description` | string or null |  | Search result description; null resets it. at most 320 characters |
| `og_title` | string or null |  | Title of the share card on social networks; null uses the search title. at most 200 characters |
| `og_description` | string or null |  | Text of the share card; null uses the search description. at most 500 characters |
| `og_media_id` | string or null |  | Media library file id of the share picture (media_list finds them); null removes it |
| `robots_index` | boolean |  | false hides the page from search engines |
| `robots_follow` | boolean |  | false asks search engines not to follow the links on the page |
| `canonical_url` | string or null |  | The address search engines index instead; null clears it. at most 2048 characters |
| `sitemap_include` | boolean |  | false leaves the page out of the sitemap |
| `sitemap_priority` | number or null |  | 0 to 1 in steps of 0.1; null is automatic. 0 to 1 |
| `sitemap_changefreq` | string or null |  | null is automatic. one of "always", "hourly", "daily", "weekly", "monthly", "yearly", "never" |
| `search_expires_at` | string or null |  | ISO 8601 date and time after which search engines drop the page; null clears it |

Example input:

```json
{
  "category_id": "019bb50f-c863-7fa2-b8ae-0d6b18758e24",
  "seo_title": "Handmade mugs",
  "og_description": "Hand-painted mugs from our studio."
}
```

### `collection_seo_set` [#collection_seo_set]

Set the search title and description of a collection, its share card, and how search engines index it.

Read the current settings with collection_seo_get. A field left out stays as it is; null resets it to automatic. robots_index false hides the page from search engines and the sitemap; canonical_url names the address search engines should index instead (a storefront path /… or an https address). The sitemap priority and change frequency are hints search engines mostly ignore; leave them automatic unless asked.

- Action key: `collection_seo.set`
- Permission: `products.write`
- Approval: Waits for approval when the store requires it for this action.
- Effect: Changes the live store.
- Retries: safe to repeat with the same input.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `collection_id` | string | yes | Collection id |
| `seo_title` | string or null |  | Search result title; null resets it. at most 70 characters |
| `seo_description` | string or null |  | Search result description; null resets it. at most 320 characters |
| `og_title` | string or null |  | Title of the share card on social networks; null uses the search title. at most 200 characters |
| `og_description` | string or null |  | Text of the share card; null uses the search description. at most 500 characters |
| `og_media_id` | string or null |  | Media library file id of the share picture (media_list finds them); null removes it |
| `robots_index` | boolean |  | false hides the page from search engines |
| `robots_follow` | boolean |  | false asks search engines not to follow the links on the page |
| `canonical_url` | string or null |  | The address search engines index instead; null clears it. at most 2048 characters |
| `sitemap_include` | boolean |  | false leaves the page out of the sitemap |
| `sitemap_priority` | number or null |  | 0 to 1 in steps of 0.1; null is automatic. 0 to 1 |
| `sitemap_changefreq` | string or null |  | null is automatic. one of "always", "hourly", "daily", "weekly", "monthly", "yearly", "never" |
| `search_expires_at` | string or null |  | ISO 8601 date and time after which search engines drop the page; null clears it |

Example input:

```json
{
  "collection_id": "019bb51a-2f4e-7c1d-9a3b-5e6f7a8b9c0d",
  "seo_title": "Summer edit",
  "seo_description": "Light linen pieces for warm days."
}
```
