Skip to content

Open Graph Protocol Research

The Open Graph Protocol (OGP) is arguably the most successful entity schema ever deployed. 69.8% of all websites use Open Graph (W3Techs, Jan 2026), making it the dominant structured data format on the web. Every og:type, og:title, og:image tag follows this spec. It defines how arbitrary web content becomes typed objects with properties and relationships.

Key insight: OGP solved the “how do you type everything on the web?” problem with radical simplicity. We can learn from their type hierarchy and design philosophy.


April 21, 2010 — Mark Zuckerberg announced the Open Graph Protocol at Facebook’s F8 developer conference, calling it “the most transformative thing we’ve ever done for the Web.”

The initiative launched with three components:

  1. Social Plugins (Like button) — Simple HTML embeds, one line of code
  2. Open Graph Protocol — Metadata standard to turn web pages into graph objects
  3. Graph API — New developer platform

Design Goal: Developer simplicity. The protocol was designed so publishers could “copy and paste” meta tags.

Within 7 days of launch: Hosting services, libraries, and a WordPress plugin had been created.

OGP was inspired by and builds on:

  • Dublin Core — Foundational web metadata vocabulary
  • RDFa — Embedding structured data in HTML (OGP is RDFa-based)
  • Microformats — Lightweight semantic markup
  • link-rel canonical — URL canonicalization
DateEvent
April 2010OGP announced at F8 with Like button
October 2009Open Graph API concept first unveiled
January 2012OGP 1.1 released, reduced types from 39 to 12
October 2012Custom Open Graph actions deprecated (auto-posting)
May 2019Open Graph Stories deprecated (render as plain links)
August 2018publish_actions permission removed from Facebook Login

Notable: OGP 1.0 defined 39 object types. OGP 1.1 simplified to 12 global types. Types like “band” and “musician” were consolidated into “profile”.


PersonRoleOrganizationEra
Mark ZuckerbergAnnounced OGP at F8Facebook2010
Bret TaylorDirector of Platform Products, led Open Graph developmentFacebook2009-2013
David RecordonSenior Open Programs Manager, presented OGP design decisionsFacebook2009-2012
Mike SchroepferHead of EngineeringFacebook2010
Chris MessinaCritic/analyst, inventor of hashtagIndependent2010
Niall KennedyCreated PHP validator, documented OGP 1.1Independent2011-2012

Bret Taylor was the key technical leader. He joined Facebook when they acquired FriendFeed in 2009, led the Platform team, demonstrated OGP at F8 2010, and was promoted to CTO in June 2010.

David Recordon presented “The Open Graph Protocol Design Decisions” at W3C’s Linked Data Camp at WWW 2010 (April 29, 2010). He defended OGP’s “openness” — it’s licensed under Open Web Foundation Agreement, increases semantic web data, and isn’t proprietary to Facebook.


PropertyTypeDescription
og:titlestringTitle as it should appear in the graph
og:typestringObject type (see below)
og:imageurlImage URL representing the object
og:urlurlCanonical URL (permanent ID in the graph)
PropertyTypeDescription
og:audiourlAudio file URL
og:descriptionstring1-2 sentence description
og:determinerenumArticle before title: “a”, “an”, “the”, "", “auto”
og:localestringLocale in language_TERRITORY format (default: en_US)
og:locale:alternatestring[]Array of alternate locales
og:site_namestringParent website name (e.g., “IMDb”)
og:videourlVideo file URL

og:image sub-properties:

  • og:image:url — Same as og:image
  • og:image:secure_url — HTTPS version
  • og:image:type — MIME type
  • og:image:width — Pixel width
  • og:image:height — Pixel height
  • og:image:alt — Alt text description

og:video — Same sub-properties as og:image

og:audio — Has :url, :secure_url, :type (no dimensions)


  • Namespace: https://ogp.me/ns/website#
  • Properties: None beyond basic metadata
  • Note: Default type. Any non-marked up page is treated as website
  • Namespace: https://ogp.me/ns/article#
  • Properties:
    • article:published_time (datetime) — First published
    • article:modified_time (datetime) — Last changed
    • article:expiration_time (datetime) — Expiry date
    • article:author (profile[]) — Writers
    • article:section (string) — High-level section (e.g., “Technology”)
    • article:tag (string[]) — Tag words
  • Namespace: https://ogp.me/ns/book#
  • Properties:
    • book:author (profile[]) — Authors
    • book:isbn (string) — ISBN
    • book:release_date (datetime) — Release date
    • book:tag (string[]) — Tags
  • Namespace: https://ogp.me/ns/profile#
  • Properties:
    • profile:first_name (string)
    • profile:last_name (string)
    • profile:username (string)
    • profile:gender (enum: male, female)
  • Namespace: https://ogp.me/ns/payment#
  • Properties:
    • payment:description (string)
    • payment:currency (string) — ISO 4217 code
    • payment:amount (float)
    • payment:expires_at (datetime)
    • payment:status (enum: PENDING, PAID, FAILED, EXPIRED)
    • payment:id (string)
    • payment:success_url (url)

Namespace: https://ogp.me/ns/music#

  • music:duration (integer ≥1) — Length in seconds
  • music:album (music.album[]) — Albums containing this song
  • music:album:disc (integer ≥1) — Disc number
  • music:album:track (integer ≥1) — Track number
  • music:musician (profile[]) — Artists
  • music:song (music.song) — Songs on album
  • music:song:disc (integer ≥1)
  • music:song:track (integer ≥1)
  • music:musician (profile) — Artist
  • music:release_date (datetime)
  • music:song — Same structure as album
  • music:song:disc
  • music:song:track
  • music:creator (profile) — Playlist creator
  • music:creator (profile) — Station creator

Namespace: https://ogp.me/ns/video#

  • video:actor (profile[]) — Actors
  • video:actor:role (string) — Role played
  • video:director (profile[]) — Directors
  • video:writer (profile[]) — Writers
  • video:duration (integer ≥1) — Length in seconds
  • video:release_date (datetime)
  • video:tag (string[])
  • All properties from video.movie, plus:
  • video:series (video.tv_show) — Parent series
  • Same properties as video.movie
  • Same properties as video.movie
  • For videos not fitting other categories

Namespace: https://ogp.me/ns/business#

Required:

  • place:location:latitude
  • place:location:longitude
  • business:contact_data:street_address
  • business:contact_data:locality
  • business:contact_data:country
  • business:contact_data:postal_code

Optional:

  • business:contact_data:region
  • business:contact_data:email
  • business:contact_data:phone_number
  • business:contact_data:fax_number
  • business:contact_data:website
  • business:hours:day, business:hours:start, business:hours:end

  • og:price:amount — Price
  • og:price:currency — Currency code (USD, EUR, etc.)
  • product:availability — Stock status
  • product:condition — Item condition (new, used, etc.)
  • product:brand — Brand name
  • product:retailer_item_id — Product ID

TypeDescriptionExample Values
Booleantrue/falsetrue, false, 1, 0
DateTimeISO 8601 date/time2024-01-15T10:30:00Z
EnumBounded set of stringsmale, female
Float64-bit signed floating point1.234, -1.2e3
Integer32-bit signed integer1234, -123
StringUnicode charactersAny text
URLhttp/https URLhttps://example.com

From the RDF schema, these are explicitly deprecated:

  • og:audio:title, og:audio:artist, og:audio:album
  • og:latitude, og:longitude (use place:location instead)
  • og:street-address, og:locality, og:region, og:postal-code, og:country-name
  • og:email, og:phone_number, og:fax_number
  • og:isbn (use book:isbn)
  • og:upc

OGP allows custom types using CURIEs (Compact URIs):

<html prefix="my_namespace: https://example.com/ns#">
<head>
<meta property="og:type" content="my_namespace:my_type" />
</head>

Key distinction:

  • Global types use dot notation: video.movie, music.song
  • Custom types use colon notation: my_namespace:my_type

Developers could create custom actions scoped to their Facebook application, though this was largely deprecated in 2012. Approved core actions remaining:

  • Like (any object)
  • Follow (profile)
  • Listen (song)
  • Read (article)
  • Watch (video/movie/TV show)

AspectOpen GraphSchema.org
PurposeSocial media sharingSearch engine SEO
Created byFacebook (2010)Google, Microsoft, Yahoo, Yandex (2011)
Adoption69.8% of web52.6% (JSON-LD)
ComplexitySimple, ~12 typesComplex, 800+ types
ImplementationMeta tags in <head>JSON-LD, microdata, RDFa
Relationship modelingMinimalRich

Key insight: OGP optimizes for the “link preview” use case. Schema.org optimizes for the “understand everything about this page” use case. Use both.

Twitter Cards are based on Open Graph conventions. Twitter’s parser:

  1. Checks for Twitter-specific tags (twitter:card, twitter:title, etc.)
  2. Falls back to Open Graph tags if Twitter tags missing

Twitter Card Types:

  • summary — Default card with thumbnail
  • summary_large_image — Large image card
  • player — Video/audio player
  • app — App download card
PlatformOGP SupportNotes
FacebookFullCreator of OGP
LinkedInFullUses OGP for link previews
Twitter/XPartialPrefers Twitter Cards, OGP fallback
PinterestPartialPrefers Schema.org for Rich Pins
SlackFullUses OGP for “unfurling”
DiscordFullUses OGP for embeds
WhatsAppFullUses OGP for link previews
iMessageFullUses OGP for rich links

<html prefix="og: https://ogp.me/ns#">
<head>
<meta property="og:title" content="Page Title" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://example.com/image.jpg" />
<meta property="og:url" content="https://example.com/page" />
</head>
PlatformRecommended SizeMin SizeMax File Size
Facebook1200×630px600×315px8MB
LinkedIn1200×627px401px wide5MB
Twitter1200×628px120×120px5MB
General1200×630px (1.91:1)200×200px5MB
  1. Missing og:image — Results in no preview image
  2. Relative URLs — Must use absolute URLs
  3. Images too small — Won’t display or will show as tiny thumbnail
  4. Description too long — Keep under 160 characters
  5. Not pre-caching — First share may not show image
  • Facebook Sharing Debugger: https://developers.facebook.com/tools/debug/
  • LinkedIn Post Inspector: https://www.linkedin.com/post-inspector/
  • Twitter Card Validator: https://cards-dev.twitter.com/validator
  • Open Graph Debugger: https://ogdebugger.com/


  1. Radical simplicity — Only 4 required properties. Anyone can implement.

  2. Pragmatic type system — 12 core types cover 90% of web content. Not trying to model everything.

  3. Flat inheritance — Types don’t deeply inherit. video.movie isn’t a subtype of video that’s a subtype of media. Each type stands alone.

  4. Verticals as namespacesmusic.*, video.* group related types without inheritance complexity.

  5. References over embeddingsarticle:author references a profile by URL, doesn’t embed the data. Follows graph principles.

  6. Arrays for multiplicity — Multiple images, authors, tags handled by repeating the same property.

  7. Structured propertiesog:image has sub-properties like og:image:width. Clean way to add metadata without new top-level properties.

OGP PatternOur Application
4 required + many optionalCore entity properties: id, type, title, created
Vertical namespacesCategory-based type grouping
URL-based referencesEntity relationships by ID
Structured sub-propertiesNested metadata
Enum constraintsStatus fields, type restrictions
DateTime for temporalitycreated, modified, published

From OGP’s proven types:

  • article → Note, Document
  • book → Reference
  • profile → Person, Contact
  • video.movie, video.episode → Media items
  • music.song, music.album → Media with relationships
  • product → Item with price/availability
  • business.business → Place with contact info

OGP models relationships through:

  1. Type referencesvideo:series points to a video.tv_show
  2. Profile arraysarticle:author is an array of profile references
  3. Nested metadatamusic:album:track gives position within container

This is reference-based, not join-table-based. The relationship lives on the referring object.



Original types from May 2010 (via Wayback Machine):

CategoryTypes
Activitiesactivity, sport
Businessesbar, company, cafe, hotel, restaurant
Groupscause, sports_league, sports_team
Organizationsband, government, non_profit, school, university
Peopleactor, athlete, author, director, musician, politician, public_figure
Placescity, country, landmark, state_province
Products/Entertainmentalbum, book, drink, food, game, product, song, movie, tv_show
Websitesblog, website, article

Note: OGP 1.0 DID have organization types (band, company, government, non_profit, school, university) and place types (city, country, landmark). These were consolidated/deprecated in OGP 1.1 (2012).


TypeOGP 1.0OGP CurrentStatus
Event❌ Never existed❌ NoneFacebook Events are Graph API objects, not OGP
Place✅ city, country, landmark, state_province❌ DeprecatedProperties deprecated in RDF schema
Organization✅ band, government, non_profit, school, university, company⚠️ Only business.businessConsolidated

Why no Event type? Facebook Events exist in the Graph API (proprietary), but external event websites just use og:type="website". The OGP philosophy is “link preview metadata” not “comprehensive entity typing.”


  • Created research doc
  • Outlined research tasks
  • Fetched and documented full ogp.me specification
  • Retrieved RDF schema with all properties and deprecated items
  • Documented complete type hierarchy with all properties per type
  • Found key people: Bret Taylor, David Recordon, Mark Zuckerberg
  • Documented OGP history: April 21, 2010 F8 announcement
  • Tracked evolution: OGP 1.0 (39 types) → OGP 1.1 (12 types)
  • Compared to Schema.org, Twitter Cards
  • Found adoption statistics: 69.8% of web uses OGP
  • Documented extension mechanism (custom namespaces)
  • Listed all deprecated properties from RDF schema
  • Compiled implementation best practices
  • Identified lessons for entity type design

2026-01-24: Deep-dive on Event/Place/Organization

Section titled “2026-01-24: Deep-dive on Event/Place/Organization”
  • Confirmed: OGP NEVER had event type
  • Confirmed: OGP 1.0 HAD place types (city, country, landmark) — now deprecated
  • Confirmed: OGP 1.0 HAD organization types (band, company, government, etc.) — now consolidated into business.business
  • Decision: Use OGP as foundation, add event/place/organization ourselves