> Portal Navigation:
> 
> - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version.
> - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages).
> - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`).
> - Top-level index of all portals: https://dev.wix.com/docs/llms.txt
> - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt

# SetSiteSeoTags

# Package: seo

# Namespace: SiteSeoTagsService

# Method link: https://dev.wix.com/docs/api-reference/business-management/seo/site-seo-tags-v1/set-site-seo-tags.md

## Permission Scopes:
Manage SEO Settings: SCOPE.PROMOTE.MANAGE-SEO

## Introduction

Sets a site's site-wide SEO tags.

List the fields to change in `fieldMask`.

Setting `tags` replaces the site's tags in full, so retrieve the current tags with
[Get Site SEO
Tags](https://dev.wix.com/docs/api-reference/business-management/seo/site-seo-tags-v1/get-site-seo-tags.md)
and send back the complete set you want the site to have. Two consequences are easy
to miss:

- Leaving out the `robots` tag makes the site indexable again, because no `noindex`
directive remains.
- Leaving out `og:image` clears the site's default social share image.

To remove every site tag, send `tags` as an empty list with `tags` in the field mask.
Site verification tags added through the dashboard are stored separately and aren't
affected.

Tags are validated before anything is saved, so a request that contains an invalid
tag changes nothing.

---

## REST API

### Schema

```
 Method: setSiteSeoTags
 Description: Sets a site's site-wide SEO tags.  List the fields to change in `fieldMask`.  Setting `tags` replaces the site's tags in full, so retrieve the current tags with [Get Site SEO Tags](https://dev.wix.com/docs/api-reference/business-management/seo/site-seo-tags-v1/get-site-seo-tags.md) and send back the complete set you want the site to have. Two consequences are easy to miss:  - Leaving out the `robots` tag makes the site indexable again, because no `noindex` directive remains. - Leaving out `og:image` clears the site's default social share image.  To remove every site tag, send `tags` as an empty list with `tags` in the field mask. Site verification tags added through the dashboard are stored separately and aren't affected.  Tags are validated before anything is saved, so a request that contains an invalid tag changes nothing.
 URL: https://www.wixapis.com/promote/seo/v1/site-seo-tags
 Method: PATCH
 # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present.
 Required parameters:  siteSeoTags, fieldMask
 Method parameters: 
   param name: fieldMask | type: fieldMask | description: Fields to update.  Supported properties: `tags` | required: true 
   param name: siteSeoTags | type: SiteSeoTags | description: Site-wide SEO tags are the meta tags that apply to every page of a site, such as site verification tags, the default social share image, and whether search engines may index the site.  A site has exactly one set of site SEO tags. Tags that belong to a single page, such as titles and descriptions, are managed with the Item SEO Tags API, and the patterns that generate them with the SEO Patterns API. | required: true 
        - name: tags | type: array<Tag> | description: Site-wide tags that apply to every page of the site.  Supported tags:  - `og:image`: Default social share image for the site. - `robots` with a `noindex` or `none` directive: Stops search engines indexing the site. - Site verification tags, such as `google-site-verification`, `msvalidate.01`, `p:domain_verify`, and `yandex-verification`. A site supports a single tag per verification provider. - Other site-wide meta tags, specified as a `name` and `content` pair.  Tags that belong to a single page, such as titles, descriptions, and canonical links, aren't site-wide. Set those with the [Item SEO Tags API](https://dev.wix.com/docs/api-reference/business-management/seo/item-seo-tags-v1/introduction.md).  | validation: maxItems 100
           - name: type | type: string | description: SEO tag type.   Supported values: `title`, `meta`, `script`, `link`.  
           - name: props | type: object | description: A `{"key": "value"}` pair object where each SEO tag property (`"name"`, `"content"`, `"rel"`, `"href"`) contains a value. For example: `{"name": "description", "content": "the description itself"}`.  
           - name: meta | type: object | description: SEO tag metadata. For example, `{"height": 300, "width": 240}`.  
           - name: children | type: string | description: SEO tag inner content. For example, `<title> inner content </title>`.  
           - name: custom | type: boolean | description: Whether the tag is a [custom tag](https://support.wix.com/en/article/adding-additional-meta-tags-to-your-sites-pages) — i.e. an entry from the site's Advanced/Custom Tags list.  This flag is scoped to that feature only. It is NOT an indicator of whether a standard tag (`title`, `description`, Open Graph, etc.) reflects a manually configured value versus a computed default/pattern — standard tags always resolve with `custom: false`, even when their content comes from a page's manually saved SEO title/description override. Don't use this field to verify whether a live page reflects a manual per-page SEO edit.  Limitation: when `ResolveStaticPageSeoTags` is called without `seoData`, the per-page SEO data is read only from the Vibe/Wix-managed-headless override store. That store holds nothing for classic Wix Editor or Wix Studio pages, so even genuine Advanced/Custom Tags saved on those pages are missing from the response entirely — there, `false` means this API could not tell, not that no custom tag exists. Pass `seoData` explicitly to resolve against a known set of tags.  
           - name: disabled | type: boolean | description: Whether the tag is disabled. If the tag is disabled, people can't find your page when searching for this phrase in search engines.  
 Return type: SetSiteSeoTagsResponse
  - name: siteSeoTags | type: SiteSeoTags | description: Updated site SEO tags.  
     - name: id | type: string | description: Site GUID.  | read-only: true | validation: format GUID
     - name: tags | type: array<Tag> | description: Site-wide tags that apply to every page of the site.  Supported tags:  - `og:image`: Default social share image for the site. - `robots` with a `noindex` or `none` directive: Stops search engines indexing the site. - Site verification tags, such as `google-site-verification`, `msvalidate.01`, `p:domain_verify`, and `yandex-verification`. A site supports a single tag per verification provider. - Other site-wide meta tags, specified as a `name` and `content` pair.  Tags that belong to a single page, such as titles, descriptions, and canonical links, aren't site-wide. Set those with the [Item SEO Tags API](https://dev.wix.com/docs/api-reference/business-management/seo/item-seo-tags-v1/introduction.md).  | validation: maxItems 100
        - name: type | type: string | description: SEO tag type.   Supported values: `title`, `meta`, `script`, `link`.  
        - name: props | type: object | description: A `{"key": "value"}` pair object where each SEO tag property (`"name"`, `"content"`, `"rel"`, `"href"`) contains a value. For example: `{"name": "description", "content": "the description itself"}`.  
        - name: meta | type: object | description: SEO tag metadata. For example, `{"height": 300, "width": 240}`.  
        - name: children | type: string | description: SEO tag inner content. For example, `<title> inner content </title>`.  
        - name: custom | type: boolean | description: Whether the tag is a [custom tag](https://support.wix.com/en/article/adding-additional-meta-tags-to-your-sites-pages) — i.e. an entry from the site's Advanced/Custom Tags list.  This flag is scoped to that feature only. It is NOT an indicator of whether a standard tag (`title`, `description`, Open Graph, etc.) reflects a manually configured value versus a computed default/pattern — standard tags always resolve with `custom: false`, even when their content comes from a page's manually saved SEO title/description override. Don't use this field to verify whether a live page reflects a manual per-page SEO edit.  Limitation: when `ResolveStaticPageSeoTags` is called without `seoData`, the per-page SEO data is read only from the Vibe/Wix-managed-headless override store. That store holds nothing for classic Wix Editor or Wix Studio pages, so even genuine Advanced/Custom Tags saved on those pages are missing from the response entirely — there, `false` means this API could not tell, not that no custom tag exists. Pass `seoData` explicitly to resolve against a known set of tags.  
        - name: disabled | type: boolean | description: Whether the tag is disabled. If the tag is disabled, people can't find your page when searching for this phrase in search engines.  
     - name: embedTags | type: array<Tag> | description: Site verification tags that were added through the site's SEO settings in the dashboard, which stores them as HTML embeds rather than as site tags.  Returned so that a read reflects every verification tag on the site. These tags are never included in `tags`. Empty when the site has none, and also when they can't be retrieved.  | read-only: true | validation: maxItems 500
     - name: language | type: string | description: Language the tags apply to.  Site SEO tags aren't language specific: one set of tags applies to every language version of a site. Currently always empty.  | read-only: true | validation: maxLength 100
     - name: origin | type: Origin | description: What made the most recent change to the site's tags, for example a user or the site migration flow. Derived from the caller, not from the request.  `ORIGIN_UNSPECIFIED` when the caller isn't one Wix identifies as a specific origin. Origin isn't stored with the tags either, so Get Site SEO Tags always returns `ORIGIN_UNSPECIFIED`.  | read-only: true 
         - enum:
         -     ORIGIN_UNSPECIFIED: Unknown origin. Returned by read methods, because origin isn't stored alongside the data it describes.
         -     ORIGIN_USER: A user, working in the dashboard or editor, or calling the API on their own behalf.
         -     ORIGIN_MIGRATION: The flow that imports an existing site into Wix.
         -     ORIGIN_AI: An AI agent or an automated suggestion flow.

 Possible Errors:
   HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: INVALID_FIELD_MASK | Description: The `fieldMask` is empty, or names a field that doesn't exist or can't be changed.
   HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: INVALID_TAGS | Description: A tag isn't valid at site level. For example, the tag belongs to a single page rather than the whole site, its value isn't valid for that tag, it uses an unsupported `robots` directive, or it repeats a verification provider that supports a single tag.


```

### Examples

### Add a social share image to a site's SEO tags
The request carries the tags the site already has together with the new `og:image` tag, because the tags sent replace the site's tags in full.

```curl
curl -X PATCH \
'https://www.wixapis.com/seo-metatags-server/v1/site-seo-tags' \
-H 'Authorization: <AUTH>' \
-H 'Content-Type: application/json' \
-d '{
  "siteSeoTags": {
    "tags": [
      {
        "type": "meta",
        "props": {
          "name": "description",
          "content": "Handmade ceramics from a small studio in Lisbon."
        }
      },
      {
        "type": "meta",
        "props": {
          "property": "og:image",
          "content": "https://static.wixstatic.com/media/a1b2c3_9f8e7d6c5b4a3210.jpg"
        }
      }
    ]
  },
  "fieldMask": "tags"
}'
```

---

## JavaScript SDK

### Schema

```
 Method: wixClientAdmin.seo.siteSeoTags.setSiteSeoTags(siteSeoTags, options)
 Description: Sets a site's site-wide SEO tags.  List the fields to change in `fieldMask`.  Setting `tags` replaces the site's tags in full, so retrieve the current tags with [Get Site SEO Tags](https://dev.wix.com/docs/api-reference/business-management/seo/site-seo-tags-v1/get-site-seo-tags.md) and send back the complete set you want the site to have. Two consequences are easy to miss:  - Leaving out the `robots` tag makes the site indexable again, because no `noindex` directive remains. - Leaving out `og:image` clears the site's default social share image.  To remove every site tag, send `tags` as an empty list with `tags` in the field mask. Site verification tags added through the dashboard are stored separately and aren't affected.  Tags are validated before anything is saved, so a request that contains an invalid tag changes nothing.
 # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present.
 Required parameters:  siteSeoTags, options.fieldMask, options
 Method parameters: 
   param name: options | type: SetSiteSeoTagsOptions  none | required: true 
        - name: fieldMask | type: array<string> | description: Fields to update.  Supported properties: `tags` | required: true 
   param name: siteSeoTags | type: SiteSeoTags | description: Site-wide SEO tags are the meta tags that apply to every page of a site, such as site verification tags, the default social share image, and whether search engines may index the site.  A site has exactly one set of site SEO tags. Tags that belong to a single page, such as titles and descriptions, are managed with the Item SEO Tags API, and the patterns that generate them with the SEO Patterns API. | required: true 
        - name: tags | type: array<Tag> | description: Site-wide tags that apply to every page of the site.  Supported tags:  - `og:image`: Default social share image for the site. - `robots` with a `noindex` or `none` directive: Stops search engines indexing the site. - Site verification tags, such as `google-site-verification`, `msvalidate.01`, `p:domain_verify`, and `yandex-verification`. A site supports a single tag per verification provider. - Other site-wide meta tags, specified as a `name` and `content` pair.  Tags that belong to a single page, such as titles, descriptions, and canonical links, aren't site-wide. Set those with the [Item SEO Tags API](https://dev.wix.com/docs/api-reference/business-management/seo/item-seo-tags-v1/introduction.md).  | validation: maxItems 100
           - name: type | type: string | description: SEO tag type.   Supported values: `title`, `meta`, `script`, `link`.  
           - name: props | type: object | description: A `{"key": "value"}` pair object where each SEO tag property (`"name"`, `"content"`, `"rel"`, `"href"`) contains a value. For example: `{"name": "description", "content": "the description itself"}`.  
           - name: meta | type: object | description: SEO tag metadata. For example, `{"height": 300, "width": 240}`.  
           - name: children | type: string | description: SEO tag inner content. For example, `<title> inner content </title>`.  
           - name: custom | type: boolean | description: Whether the tag is a [custom tag](https://support.wix.com/en/article/adding-additional-meta-tags-to-your-sites-pages) — i.e. an entry from the site's Advanced/Custom Tags list.  This flag is scoped to that feature only. It is NOT an indicator of whether a standard tag (`title`, `description`, Open Graph, etc.) reflects a manually configured value versus a computed default/pattern — standard tags always resolve with `custom: false`, even when their content comes from a page's manually saved SEO title/description override. Don't use this field to verify whether a live page reflects a manual per-page SEO edit.  Limitation: when `ResolveStaticPageSeoTags` is called without `seoData`, the per-page SEO data is read only from the Vibe/Wix-managed-headless override store. That store holds nothing for classic Wix Editor or Wix Studio pages, so even genuine Advanced/Custom Tags saved on those pages are missing from the response entirely — there, `false` means this API could not tell, not that no custom tag exists. Pass `seoData` explicitly to resolve against a known set of tags.  
           - name: disabled | type: boolean | description: Whether the tag is disabled. If the tag is disabled, people can't find your page when searching for this phrase in search engines.  
 Return type: PROMISE<SetSiteSeoTagsResponse>
  - name: siteSeoTags | type: SiteSeoTags | description: Updated site SEO tags.  
     - name: _id | type: string | description: Site GUID.  | read-only: true | validation: format GUID
     - name: tags | type: array<Tag> | description: Site-wide tags that apply to every page of the site.  Supported tags:  - `og:image`: Default social share image for the site. - `robots` with a `noindex` or `none` directive: Stops search engines indexing the site. - Site verification tags, such as `google-site-verification`, `msvalidate.01`, `p:domain_verify`, and `yandex-verification`. A site supports a single tag per verification provider. - Other site-wide meta tags, specified as a `name` and `content` pair.  Tags that belong to a single page, such as titles, descriptions, and canonical links, aren't site-wide. Set those with the [Item SEO Tags API](https://dev.wix.com/docs/api-reference/business-management/seo/item-seo-tags-v1/introduction.md).  | validation: maxItems 100
        - name: type | type: string | description: SEO tag type.   Supported values: `title`, `meta`, `script`, `link`.  
        - name: props | type: object | description: A `{"key": "value"}` pair object where each SEO tag property (`"name"`, `"content"`, `"rel"`, `"href"`) contains a value. For example: `{"name": "description", "content": "the description itself"}`.  
        - name: meta | type: object | description: SEO tag metadata. For example, `{"height": 300, "width": 240}`.  
        - name: children | type: string | description: SEO tag inner content. For example, `<title> inner content </title>`.  
        - name: custom | type: boolean | description: Whether the tag is a [custom tag](https://support.wix.com/en/article/adding-additional-meta-tags-to-your-sites-pages) — i.e. an entry from the site's Advanced/Custom Tags list.  This flag is scoped to that feature only. It is NOT an indicator of whether a standard tag (`title`, `description`, Open Graph, etc.) reflects a manually configured value versus a computed default/pattern — standard tags always resolve with `custom: false`, even when their content comes from a page's manually saved SEO title/description override. Don't use this field to verify whether a live page reflects a manual per-page SEO edit.  Limitation: when `ResolveStaticPageSeoTags` is called without `seoData`, the per-page SEO data is read only from the Vibe/Wix-managed-headless override store. That store holds nothing for classic Wix Editor or Wix Studio pages, so even genuine Advanced/Custom Tags saved on those pages are missing from the response entirely — there, `false` means this API could not tell, not that no custom tag exists. Pass `seoData` explicitly to resolve against a known set of tags.  
        - name: disabled | type: boolean | description: Whether the tag is disabled. If the tag is disabled, people can't find your page when searching for this phrase in search engines.  
     - name: embedTags | type: array<Tag> | description: Site verification tags that were added through the site's SEO settings in the dashboard, which stores them as HTML embeds rather than as site tags.  Returned so that a read reflects every verification tag on the site. These tags are never included in `tags`. Empty when the site has none, and also when they can't be retrieved.  | read-only: true | validation: maxItems 500
     - name: language | type: string | description: Language the tags apply to.  Site SEO tags aren't language specific: one set of tags applies to every language version of a site. Currently always empty.  | read-only: true | validation: maxLength 100
     - name: origin | type: Origin | description: What made the most recent change to the site's tags, for example a user or the site migration flow. Derived from the caller, not from the request.  `ORIGIN_UNSPECIFIED` when the caller isn't one Wix identifies as a specific origin. Origin isn't stored with the tags either, so Get Site SEO Tags always returns `ORIGIN_UNSPECIFIED`.  | read-only: true 
         - enum:
         -     ORIGIN_UNSPECIFIED: Unknown origin. Returned by read methods, because origin isn't stored alongside the data it describes.
         -     ORIGIN_USER: A user, working in the dashboard or editor, or calling the API on their own behalf.
         -     ORIGIN_MIGRATION: The flow that imports an existing site into Wix.
         -     ORIGIN_AI: An AI agent or an automated suggestion flow.

 Possible Errors:
   HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: INVALID_FIELD_MASK | Description: The `fieldMask` is empty, or names a field that doesn't exist or can't be changed.
   HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: INVALID_TAGS | Description: A tag isn't valid at site level. For example, the tag belongs to a single page rather than the whole site, its value isn't valid for that tag, it uses an unsupported `robots` directive, or it repeats a verification provider that supports a single tag.


```

### Examples

### Add a social share image to a site's SEO tags
The request carries the tags the site already has together with the new og:image tag, because the tags sent replace the site's tags in full.

```javascript
import { siteSeoTags } from "@wix/seo";

async function setSiteSeoTags() {
  const response = await siteSeoTags.setSiteSeoTags(
    {
      tags: [
        {
          type: "meta",
          props: { name: "description", content: "Handmade ceramics from a small studio in Lisbon." },
        },
        {
          type: "meta",
          props: {
            property: "og:image",
            content: "https://static.wixstatic.com/media/a1b2c3_9f8e7d6c5b4a3210.jpg",
          },
        },
      ],
    },
    { fieldMask: ["tags"] },
  );
  return response;
}

/* Promise resolves to:
 * {
 *   "siteSeoTags": {
 *     "tags": [
 *       {
 *         "type": "meta",
 *         "props": { "name": "description", "content": "Handmade ceramics from a small studio in Lisbon." },
 *         "children": "",
 *         "custom": false,
 *         "disabled": false
 *       },
 *       {
 *         "type": "meta",
 *         "props": { "property": "og:image", "content": "https://static.wixstatic.com/media/a1b2c3_9f8e7d6c5b4a3210.jpg" },
 *         "children": "",
 *         "custom": false,
 *         "disabled": false
 *       }
 *     ],
 *     "embedTags": [],
 *     "origin": "ORIGIN_UNSPECIFIED",
 *     "_id": "118f445d-6b84-4268-821d-7d2b9f40ac60"
 *   }
 * }
 */

```

### setSiteSeoTags (self-hosted)
Self-hosted SDK calls require you to [create a client](https://dev.wix.com/docs/sdk/articles/work-with-the-sdk/about-the-wix-client.md).

```javascript
import { createClient } from '@wix/sdk';
import { siteSeoTags } from '@wix/seo';
// Import the auth strategy for the relevant access type
// Import the relevant host module if needed

const myWixClient = createClient ({
  modules: { siteSeoTags },
  // Include the auth strategy and host as relevant
});


async function setSiteSeoTags(siteSeoTags,options) {
  const response = await myWixClient.siteSeoTags.setSiteSeoTags(siteSeoTags,options);
};
```

---