# Webflow

## Getting Started

## Create a connection

1. Sign in to [OpenGraph+](/)
2. Go to your website's **Meta Tags** page
3. On your first visit you'll see the Terms of Service; click **Agree & Create Connection**, then copy your connection URL

Your connection URL looks like `https://$OGPLUS_KEY.ogplus.net`.

## Find your page settings

In the Webflow Designer, click the **Pages** panel (or press P), then click the gear icon next to any page to open its settings.

## Set Open Graph tags per page

Webflow has built-in fields for Open Graph tags in **Page Settings → Open Graph Settings**:

- **og:title** - set the "Title" field (defaults to your page title)
- **og:description** - set the "Description" field
- **og:image** - enter your connection URL + page path: `https://$OGPLUS_KEY.ogplus.net/about`

Replace `https://$OGPLUS_KEY.ogplus.net` with your actual connection URL, and `/about` with the path of each page:

- For the homepage: `https://$OGPLUS_KEY.ogplus.net/`
- For `/about`: `https://$OGPLUS_KEY.ogplus.net/about`
- For `/blog/my-post`: `https://$OGPLUS_KEY.ogplus.net/blog/my-post`

Then go to **Page Settings → Custom Code → Head Code** and add the twitter card tag:

```html
<meta name="twitter:card" content="summary_large_image">
```

Webflow automatically sets `og:url` to the canonical URL and `og:site_name` to your project name. You do not need to set these manually.

## CMS Collection pages

For dynamic CMS pages (blog posts, team members, etc.), Webflow fills in `og:title` and `og:description` from your collection fields automatically. You still need to set the `og:image` URL for each page path, which you can do in the collection page template's Open Graph Settings.

## Repeat for each page

Webflow doesn't have server-side templating, so you need to set the `og:image` URL for each page individually in that page's settings.

## Verify

Publish your site and open the [preview tool](/previews/new). Paste a URL from your site and confirm all Open Graph meta tags are present with correct values.

## Multiple domains

Running staging and production, subdomains, or several sites under one account? See [Multiple domains & environments](/docs/multiple-domains). For a single site, the connection tag above is all you need.


## Customize

OpenGraph+ captures your page in a headless browser and renders it as an image. You control what gets captured using meta tags and CSS added through Webflow's Custom Code feature.

All of the rendering options below are standard HTML meta tags and CSS, so they work the same regardless of platform. The [HTML, CSS, & HTTP guide](/docs/html-css) covers each one in detail. This page shows how to add them in Webflow.

## Meta tags

Add these through **Page Settings > Custom Code > Head Code** for per-page control, or **Site Settings > Custom Code > Head Code** for site-wide defaults. They're all optional.

```html
<!-- Render at 800px wide instead of the default -->
<meta property="og:plus:viewport:width" content="800">

<!-- Only capture this element instead of the full page -->
<meta property="og:plus:selector" content=".hero-section">

<!-- Inject inline styles on the captured element -->
<meta property="og:plus:style" content="padding: 60px; background: #0f172a; color: white;">
```

See the [Rendering](/docs/html-css/rendering) guide for what each meta tag does and how they interact.

## CSS styling

OpenGraph+ adds a `data-ogplus` attribute to your `<html>` element during capture. Add a `<style>` block to **Site Settings > Custom Code > Head Code** to hide navigation, adjust spacing, or restyle anything for the social card without affecting your actual site.

```html
<style>
  html[data-ogplus] .navbar { display: none; }
  html[data-ogplus] .footer { display: none; }
  html[data-ogplus] .hero-section { padding: 60px; }
</style>
```

See [CSS Styling](/docs/html-css/data-attributes) for plain CSS examples and [Tailwind setup](/docs/html-css/data-attributes#tailwind-css).

## Templates

For fully custom social card layouts that pull content from your page, use `<template>` elements. Add this to **Site Settings > Custom Code > Footer Code** (before `</body>`):

```html
<template id="ogplus">
  <div style="padding: 48px; background: #0f172a; color: white; height: 100%;">
    <h1 style="font-size: 48px;">
      ${document.querySelector('h1')?.textContent}
    </h1>
  </div>
</template>
```

See the [Templates](/docs/html-css/templates) guide for expression syntax, platform-specific templates, and full examples.

## Testing locally

The [Preview Bookmarklet](/docs/html-css/bookmarklet) sets the `data-ogplus` attribute in your browser so you can see how your CSS looks without publishing or waiting for a real crawler to hit your page.

## Full example

Site-wide Custom Code > Head Code with all the pieces together:

```html
<!-- Social card styling -->
<style>
  html[data-ogplus] .navbar,
  html[data-ogplus] .footer { display: none; }
  html[data-ogplus] .hero-section { padding: 60px; }
</style>

<!-- OpenGraph+ rendering options -->
<meta property="og:plus:selector" content=".hero-section">
<meta property="og:plus:style" content="padding: 60px; background-color: #0f172a; color: white;">
<meta property="og:plus:viewport:width" content="800">
```


## Troubleshooting

## Meta tags not appearing

Make sure you set the og:image in **Page Settings** for each page, not just the site-wide settings. Webflow's site-wide Open Graph settings may be overridden by page-level settings.

If using Custom Code, confirm the meta tags are inside the `<head>` tag. View your page source to check.

## Wrong page path

The path in the og:image URL must match the actual page URL. If your page is at `yoursite.com/blog/my-post`, use `https://$OGPLUS_KEY.ogplus.net/blog/my-post`.

## Dynamic pages (CMS collections)

Webflow CMS pages have dynamic paths. You can use Webflow's Open Graph Settings on the CMS template page, but the og:image URL will be the same for all items in the collection.

For per-item images, use the Custom Code field on each CMS item, or set the og:image field using the collection item's slug via Webflow's CMS-aware og:image field.

## Wrong image showing

This is almost always a caching issue. Purge the cached image from the OpenGraph+ dashboard, then re-check with the preview tool.

## Social platforms not updating

Social networks cache images aggressively. After purging from OpenGraph+, use each platform's debugger to force a refresh:

- **Facebook**: [Sharing Debugger](https://developers.facebook.com/tools/debug/)
- **Twitter/X**: [Card Validator](https://cards-dev.twitter.com/validator)
- **LinkedIn**: [Post Inspector](https://www.linkedin.com/post-inspector/)

## Purging cached images

1. Go to your OpenGraph+ dashboard
2. Navigate to the website's cache page
3. Enter the URL and purge

The next request from a social platform will trigger a fresh render.

## Testing

Use the [preview tool](/previews/new) to verify your setup before sharing URLs. This shows you exactly what social platforms will see.

