> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.webflow.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.webflow.com/_mcp/server.

# Update Page Metadata

PUT https://api.webflow.com/v2/pages/{page_id}
Content-Type: application/json

Update Page-level metadata, including SEO and Open Graph fields.

Required scope | `pages:write`


Reference: https://developers.webflow.com/data/reference/pages-and-components/pages/update-page-settings

## Authentication

- `Authorization` header (bearer token, required)

## Request

### Path parameters

- `page_id` (string, required) — Unique identifier for a Page

### Query parameters

- `localeId` (string, optional) — Unique identifier for a specific Locale. [Learn more about localization.](/data/v2.0.0/docs/working-with-localization)

### Body (application/json)

- `title` (string, optional) — Title for the page
- `slug` (string, optional) — Slug for the page. **Note:** The slug field is ignored in the following cases — all other fields in the same request still apply: * The site's home page, collection template pages, and utility pages (e.g. 404, password, search). * For secondary locales, updating the slug requires an Advanced or Enterprise localization add-on plan.
- `seo` (object, optional) — SEO-related fields for the Page
  - `title` (string, optional) — The Page title shown in search engine results
  - `description` (string, optional) — The Page description shown in search engine results
- `openGraph` (object, optional) — Open Graph fields for the Page
  - `title` (string, optional) — The title supplied to Open Graph annotations
  - `titleCopied` (boolean, optional) — Indicates the Open Graph title was copied from the SEO title
  - `description` (string, optional) — The description supplied to Open Graph annotations
  - `descriptionCopied` (boolean, optional) — Indicates the Open Graph description was copied from the SEO description

## Response

### 200

Request was successful

- `id` (string, required) — Unique identifier for the Page
- `siteId` (string, optional) — Unique identifier for the Site
- `title` (string, optional) — Title of the Page
- `slug` (string, optional) — slug of the Page (derived from title)
- `parentId` (string, optional) — Identifier of the parent folder
- `collectionId` (string, optional) — Unique identifier for a linked Collection, value will be null if the Page is not part of a Collection.
- `createdOn` (string, optional) — The date the Page was created
- `lastUpdated` (string, optional) — The date the Page was most recently updated
- `archived` (boolean, optional, default: false) — Whether the Page has been archived
- `draft` (boolean, optional, default: false) — Whether the Page is a draft
- `canBranch` (boolean, optional, default: false) — Indicates whether the Page supports [Page Branching](https://university.webflow.com/lesson/page-branching). Pages that are already branches cannot be branched again.
- `isBranch` (boolean, optional, default: false) — Indicates whether the Page is a Branch of another Page [Page Branching](https://university.webflow.com/lesson/page-branching)
- `branchId` (string, optional, nullable) — If the Page is a Branch of another Page, this is the ID of the Branch
- `seo` (object, optional) — SEO-related fields for the Page
  - `title` (string, optional) — The Page title shown in search engine results
  - `description` (string, optional) — The Page description shown in search engine results
- `openGraph` (object, optional) — Open Graph fields for the Page
  - `title` (string, optional) — The title supplied to Open Graph annotations
  - `titleCopied` (boolean, optional, default: true) — Indicates the Open Graph title was copied from the SEO title
  - `description` (string, optional) — The description supplied to Open Graph annotations
  - `descriptionCopied` (boolean, optional, default: true) — Indicates the Open Graph description was copied from the SEO description
- `localeId` (string, optional, nullable) — Unique ID of the page locale
- `publishedPath` (string, optional) — Relative path of the published page URL

## Examples

**Request**

```json
{
  "title": "Guide to the Galaxy",
  "slug": "guide-to-the-galaxy",
  "seo": {
    "title": "The Ultimate Hitchhiker's Guide to the Galaxy",
    "description": "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."
  },
  "openGraph": {
    "title": "Explore the Cosmos with The Ultimate Guide",
    "titleCopied": false,
    "description": "Dive deep into the mysteries of the universe with your guide to everything galactic.",
    "descriptionCopied": false
  }
}
```

**Response**

```json
{
  "id": "6596da6045e56dee495bcbba",
  "siteId": "6258612d1ee792848f805dcf",
  "title": "Guide to the Galaxy",
  "slug": "guide-to-the-galaxy",
  "createdOn": "2024-03-11T10:42:00.000Z",
  "lastUpdated": "2024-03-11T10:42:42.000Z",
  "archived": false,
  "draft": false,
  "canBranch": false,
  "isBranch": true,
  "branchId": "68026fa68ef6dc744c75b833",
  "seo": {
    "title": "The Ultimate Hitchhiker's Guide to the Galaxy",
    "description": "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."
  },
  "openGraph": {
    "title": "Explore the Cosmos with The Ultimate Guide",
    "titleCopied": false,
    "description": "Dive deep into the mysteries of the universe with your guide to everything galactic.",
    "descriptionCopied": false
  },
  "localeId": "653fd9af6a07fc9cfd7a5e57",
  "publishedPath": "/en-us/guide-to-the-galaxy"
}
```

**SDK Code**

```typescript
import { WebflowClient } from "webflow-api";

async function main() {
    const client = new WebflowClient({
        accessToken: "YOUR_TOKEN_HERE",
    });
    await client.pages.updatePageSettings("63c720f9347c2139b248e552", {
        localeId: "65427cf400e02b306eaa04a0",
        title: "Guide to the Galaxy",
        slug: "guide-to-the-galaxy",
        seo: {
            title: "The Ultimate Hitchhiker's Guide to the Galaxy",
            description: "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.",
        },
        openGraph: {
            title: "Explore the Cosmos with The Ultimate Guide",
            titleCopied: false,
            description: "Dive deep into the mysteries of the universe with your guide to everything galactic.",
            descriptionCopied: false,
        },
    });
}
main();

```

```python
from webflow import Webflow
from webflow.pages import PageMetadataWriteSeo, PageMetadataWriteOpenGraph

client = Webflow(
    access_token="YOUR_TOKEN_HERE",
)

client.pages.update_page_settings(
    page_id="63c720f9347c2139b248e552",
    locale_id="65427cf400e02b306eaa04a0",
    title="Guide to the Galaxy",
    slug="guide-to-the-galaxy",
    seo=PageMetadataWriteSeo(
        title="The Ultimate Hitchhiker\'s Guide to the Galaxy",
        description="Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.",
    ),
    open_graph=PageMetadataWriteOpenGraph(
        title="Explore the Cosmos with The Ultimate Guide",
        title_copied=False,
        description="Dive deep into the mysteries of the universe with your guide to everything galactic.",
        description_copied=False,
    ),
)

```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.webflow.com/v2/pages/63c720f9347c2139b248e552?localeId=65427cf400e02b306eaa04a0"

	payload := strings.NewReader("{\n  \"title\": \"Guide to the Galaxy\",\n  \"slug\": \"guide-to-the-galaxy\",\n  \"seo\": {\n    \"title\": \"The Ultimate Hitchhiker's Guide to the Galaxy\",\n    \"description\": \"Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.\"\n  },\n  \"openGraph\": {\n    \"title\": \"Explore the Cosmos with The Ultimate Guide\",\n    \"titleCopied\": false,\n    \"description\": \"Dive deep into the mysteries of the universe with your guide to everything galactic.\",\n    \"descriptionCopied\": false\n  }\n}")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.webflow.com/v2/pages/63c720f9347c2139b248e552?localeId=65427cf400e02b306eaa04a0")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"title\": \"Guide to the Galaxy\",\n  \"slug\": \"guide-to-the-galaxy\",\n  \"seo\": {\n    \"title\": \"The Ultimate Hitchhiker's Guide to the Galaxy\",\n    \"description\": \"Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.\"\n  },\n  \"openGraph\": {\n    \"title\": \"Explore the Cosmos with The Ultimate Guide\",\n    \"titleCopied\": false,\n    \"description\": \"Dive deep into the mysteries of the universe with your guide to everything galactic.\",\n    \"descriptionCopied\": false\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.put("https://api.webflow.com/v2/pages/63c720f9347c2139b248e552?localeId=65427cf400e02b306eaa04a0")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"title\": \"Guide to the Galaxy\",\n  \"slug\": \"guide-to-the-galaxy\",\n  \"seo\": {\n    \"title\": \"The Ultimate Hitchhiker's Guide to the Galaxy\",\n    \"description\": \"Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.\"\n  },\n  \"openGraph\": {\n    \"title\": \"Explore the Cosmos with The Ultimate Guide\",\n    \"titleCopied\": false,\n    \"description\": \"Dive deep into the mysteries of the universe with your guide to everything galactic.\",\n    \"descriptionCopied\": false\n  }\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://api.webflow.com/v2/pages/63c720f9347c2139b248e552?localeId=65427cf400e02b306eaa04a0', [
  'body' => '{
  "title": "Guide to the Galaxy",
  "slug": "guide-to-the-galaxy",
  "seo": {
    "title": "The Ultimate Hitchhiker\'s Guide to the Galaxy",
    "description": "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."
  },
  "openGraph": {
    "title": "Explore the Cosmos with The Ultimate Guide",
    "titleCopied": false,
    "description": "Dive deep into the mysteries of the universe with your guide to everything galactic.",
    "descriptionCopied": false
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.webflow.com/v2/pages/63c720f9347c2139b248e552?localeId=65427cf400e02b306eaa04a0");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"title\": \"Guide to the Galaxy\",\n  \"slug\": \"guide-to-the-galaxy\",\n  \"seo\": {\n    \"title\": \"The Ultimate Hitchhiker's Guide to the Galaxy\",\n    \"description\": \"Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.\"\n  },\n  \"openGraph\": {\n    \"title\": \"Explore the Cosmos with The Ultimate Guide\",\n    \"titleCopied\": false,\n    \"description\": \"Dive deep into the mysteries of the universe with your guide to everything galactic.\",\n    \"descriptionCopied\": false\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "title": "Guide to the Galaxy",
  "slug": "guide-to-the-galaxy",
  "seo": [
    "title": "The Ultimate Hitchhiker's Guide to the Galaxy",
    "description": "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."
  ],
  "openGraph": [
    "title": "Explore the Cosmos with The Ultimate Guide",
    "titleCopied": false,
    "description": "Dive deep into the mysteries of the universe with your guide to everything galactic.",
    "descriptionCopied": false
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.webflow.com/v2/pages/63c720f9347c2139b248e552?localeId=65427cf400e02b306eaa04a0")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PUT"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```