Back to Blog
Open GraphDocumentation

Open Graph Protocol Documentation Explained

A human-readable walkthrough of the official Open Graph protocol documentation at ogp.me, covering every property, type, and structured object.

SS
Sanjay Samanta
June 17, 2026
7 min read

The official Open Graph protocol documentation lives at ogp.me. While authoritative, it’s dense and written in a specification style that can be difficult to parse for developers who just want to implement tags quickly.

This article walks through the official documentation section by section, explaining what each part means in practical terms.


The Specification Structure

The OGP documentation is organized into these sections:

  1. Basic Metadata — The four required properties.
  2. Optional Metadata — Recommended but non-mandatory tags.
  3. Structured Properties — Sub-properties for images, video, and audio.
  4. Object Types — Content type classifications and their specific properties.
  5. Arrays — How to declare multiple values for a property.

Basic Metadata Explained

The documentation states that every page must include four root properties. In plain HTML:

<meta property="og:title" content="Page Title" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://example.com/image.png" />
<meta property="og:url" content="https://example.com/page" />

What the docs don’t emphasize enough: og:url should always be the canonical URL — the single, authoritative URL for the page. If users can reach the same page via http://, https://, www., or non-www variants, og:url should point to whichever one you’ve canonicalized.


Optional Metadata Explained

The specification lists several optional properties that “should” be included:

Property What the Docs Say What It Means in Practice
og:description “A one to two sentence description” Keep under 200 characters. Social platforms truncate longer descriptions.
og:determiner “The word that appears before this object’s title” Rarely used. Options: "a", "an", "the", "", "auto".
og:locale “The locale these tags are marked up in” Format: language_TERRITORY (e.g., en_US). Default: en_US. See Open Graph Locale Explained.
og:locale:alternate “Array of other locales this page is available in” Used for multilingual sites with translated content.
og:site_name “The name of the overall site” Your brand name (e.g., "Open Graph Generator").

Structured Properties Explained

The documentation introduces “structured properties” for media objects. This is where many developers get confused.

When you declare og:image, you can follow it with sub-properties that describe that specific image:

<meta property="og:image" content="https://example.com/photo.jpg" />
<meta property="og:image:secure_url" content="https://example.com/photo.jpg" />
<meta property="og:image:type" content="image/jpeg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="A photo of the product" />

The critical rule: structured sub-properties must immediately follow their parent property in the HTML source. If you insert other tags between og:image and og:image:width, some parsers may fail to associate them.

For image sizing requirements, see the Open Graph Image Size Guide.


Object Types Explained

The og:type value determines which additional properties are available. The documentation groups types into verticals:

Websites and Articles

  • website — Default. No additional properties required.
  • article — Unlocks article:published_time, article:author, article:section, article:tag.

Media Types

  • music.song, music.album, music.playlist, music.radio_station
  • video.movie, video.episode, video.tv_show, video.other

People and Products

  • profile — Unlocks profile:first_name, profile:last_name, profile:username, profile:gender.
  • book — Unlocks book:author, book:isbn, book:release_date, book:tag.

In practice, 95% of pages use either website or article.


Arrays Explained

The documentation mentions that properties can have multiple values through “arrays.” This simply means repeating the same property tag:

<meta property="og:image" content="https://example.com/photo1.jpg" />
<meta property="og:image" content="https://example.com/photo2.jpg" />

<meta property="article:tag" content="Open Graph" />
<meta property="article:tag" content="SEO" />
<meta property="article:tag" content="Meta Tags" />

The first value is treated as the primary (used in the card preview), with subsequent values serving as alternates.


What the Documentation Doesn’t Cover

The official OGP spec hasn’t been significantly updated since its initial release. Several important practical considerations are missing:

  1. Twitter Card integration — Twitter has its own meta tag system that falls back to OG tags. See Twitter Open Graph Fallback Explained.
  2. Image file size limits — Each platform has different maximum file sizes (typically 5–8 MB).
  3. Cache invalidation — The spec doesn’t address how to force platforms to re-scrape updated tags.
  4. Dynamic rendering for SPAs — JavaScript-rendered OG tags require server-side or edge rendering.


Deep Technical Framework Implementations

Integrating optimized social preview tags into production web frameworks requires understanding how each runtime handles head metadata and server-side rendering:

1. Next.js App Router (layout.tsx / page.tsx)

In Next.js 14 and 15, use the centralized Metadata API to construct unified Open Graph and Twitter Card tags. This ensures that edge crawlers receive complete, pre-rendered meta tags in the initial HTML stream before client hydration:

import type { Metadata } from 'next';

export const metadata: Metadata = {
  title: 'Next-Generation Web Metadata & Social Graph Suite',
  description: 'Automate Open Graph, Twitter Cards, and Schema.org JSON-LD generation with sub-millisecond edge validation.',
  openGraph: {
    title: 'Next-Generation Web Metadata & Social Graph Suite',
    description: 'Automate Open Graph, Twitter Cards, and Schema.org JSON-LD generation with sub-millisecond edge validation.',
    url: 'https://opengraphgenerator.com/',
    siteName: 'Open Graph Generator',
    images: [
      {
        url: 'https://opengraphgenerator.com/images/hero-1200x630.png',
        width: 1200,
        height: 630,
        alt: 'Open Graph Generator Dashboard Interface',
        type: 'image/png',
      },
    ],
    locale: 'en_US',
    type: 'website',
  },
  twitter: {
    card: 'summary_large_image',
    site: '@OpenGraphGen',
    creator: '@sanjaysamanta',
    title: 'Next-Generation Web Metadata & Social Graph Suite',
    description: 'Automate Open Graph, Twitter Cards, and Schema.org JSON-LD generation with sub-millisecond edge validation.',
    images: ['https://opengraphgenerator.com/images/hero-1200x630.png'],
  },
};

For dynamic route handling in Next.js, read our comprehensive Next.js Open Graph Guide.

2. Astro Component Head Architecture

Astro’s component-first model allows you to encapsulate social sharing tags into reusable SEO layouts:

---
interface Props {
  title: string;
  description: string;
  image?: string;
  canonicalUrl?: string;
  type?: 'website' | 'article';
}

const {
  title,
  description,
  image = 'https://opengraphgenerator.com/images/default-og.png',
  canonicalUrl = Astro.url.href,
  type = 'website'
} = Astro.props;
---
<head>
  <title>{title}</title>
  <meta name="description" content={description} />
  <link rel="canonical" href={canonicalUrl} />

  <!-- Open Graph -->
  <meta property="og:type" content={type} />
  <meta property="og:site_name" content="Open Graph Generator" />
  <meta property="og:title" content={title} />
  <meta property="og:description" content={description} />
  <meta property="og:url" content={canonicalUrl} />
  <meta property="og:image" content={image} />
  <meta property="og:image:width" content="1200" />
  <meta property="og:image:height" content="630" />

  <!-- Twitter Cards -->
  <meta name="twitter:card" content="summary_large_image" />
  <meta name="twitter:site" content="@OpenGraphGen" />
  <meta name="twitter:title" content={title} />
  <meta name="twitter:description" content={description} />
  <meta name="twitter:image" content={image} />
</head>

3. Nuxt 3 & Vue Composition API

<script setup lang="ts">
useSeoMeta({
  title: 'Enterprise Social Metadata Management',
  ogTitle: 'Enterprise Social Metadata Management',
  description: 'Scalable Open Graph and Twitter Card automation for multi-tenant applications.',
  ogDescription: 'Scalable Open Graph and Twitter Card automation for multi-tenant applications.',
  ogImage: 'https://example.com/og-banner.png',
  ogImageWidth: '1200',
  ogImageHeight: '630',
  ogUrl: 'https://example.com/enterprise/',
  ogType: 'website',
  twitterCard: 'summary_large_image',
  twitterSite: '@OpenGraphGen',
});
</script>

Edge Caching, CDN Invalidation & HTTP Headers

To ensure that social scrapers (facebookexternalhit, Twitterbot, LinkedInBot, Slackbot, WhatsApp/2.x) always receive fresh metadata while minimizing origin server CPU load, implement a multi-tiered caching strategy:

Asset Category Cache-Control Header Edge CDN TTL Browser Cache TTL
HTML Webpages public, max-age=0, s-maxage=600, must-revalidate 10 Minutes 0 Seconds (Always revalidate)
Static OG Images public, max-age=31536000, immutable 1 Year 1 Year (Content-hashed URLs)
Dynamic OG API Routes public, max-age=3600, s-maxage=86400, stale-while-revalidate=86400 24 Hours 1 Hour
# NGINX Edge Caching Configuration for Social Scraping
location ~* \.(html)$ {
    add_header Cache-Control "public, max-age=0, s-maxage=600, must-revalidate";
    add_header X-Robots-Tag "all";
}

location ~* \.(png|jpg|jpeg|webp)$ {
    add_header Cache-Control "public, max-age=31536000, immutable";
    add_header Access-Control-Allow-Origin "*";
}

Comprehensive Troubleshooting & Error Code Resolution Matrix

When debugging failed link previews across development, staging, and production environments, refer to this error resolution matrix:

HTTP Status / Error Scraper Behavior Root Cause Actionable Developer Fix
401 Unauthorized Plain URL rendered, no image or text Staging environment protected by Basic Auth or IP whitelist Allowlist crawler User-Agent strings or test on public preview URLs.
403 Forbidden Scraper skips metadata extraction Web Application Firewall (WAF) or Cloudflare Bot Management blocking scrapers Add WAF custom rules to bypass verified social bots (Twitterbot, facebookexternalhit, LinkedInBot).
404 Not Found Error page metadata cached Scraped URL does not exist or has an unhandled redirect Ensure canonical trailing slashes match server routing. Inspect with Head Auditor.
SSL Handshake Failure Scraper aborts connection immediately Missing intermediate SSL certificate or expired TLS cert Install full certificate bundle. Audit security with Security Headers.
Timeout (3.0s+) Text-only link with no thumbnail Slow server response time or SSR cold starts Cache HTML responses at the edge or use static pre-rendering.
Stale Preview Cache Shows old headline/image after deploy Social platform CDN cache still active Invalidate via Facebook Debugger or LinkedIn Post Inspector.

For an in-depth walkthrough on cache purging, read How to Fix Cached Previews on LinkedIn & WhatsApp.


The Complete Technical SEO & Social Ecosystem

A world-class digital presence requires harmonizing social metadata, search engine rich results, crawl directives, and AI agent context:

  1. Live URL Inspection: Audit your production URLs with our Open Graph Inspector to detect missing properties before publishing.
  2. Twitter Card Generation: Ensure large banner rendering with our Twitter Card Generator.
  3. Structured Search Data: Unlock star ratings and FAQ rich snippets with our JSON-LD Schema Generator and validate with our Schema Inspector.
  4. Crawl Budget Management: Verify search engine bot permissions using our Robots Simulator and build compliant files with our Robots.txt Builder.
  5. AI Knowledge Architecture: Format repository knowledge for AI coding agents (Cursor, Claude Code, Windsurf) using the Open Knowledge Format (OKF) Generator and explore the OKF Developer Guide.

Generate and validate your full metadata stack with our free Open Graph Generator today!