Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use the most specific Open Graph type that truthfully describes the object represented by the page. Use article for an article, book for a book, profile for a person’s profile, an applicable music.* or video.* subtype for media, and website when the page represents a general site or has no more specific documented type. Put the value in a <meta property="og:type"> element in the document head, alongside the other required Open Graph properties.

The type is a description of the page’s represented object—not a URL category, HTML element, or arbitrary content label. The official protocol explains that Open Graph lets a web page become a rich object in a social graph (official Open Graph documentation).

What does og:type mean?

Open Graph metadata describes a web page as an object that social platforms and other consumers can interpret. The og:type property identifies what kind of object the page represents. It is one of the protocol’s required basic properties, and the selected type determines which additional properties are relevant.

For example, a news story and a company homepage may both be HTML documents, but they represent different objects. The story can use article and provide an author, section, and publication time. The homepage generally uses website, which has no additional type-specific properties in the protocol.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Sale
HTML and CSS: Design and Build Websites
  • HTML CSS Design and Build Web Sites
  • Comes with secure packaging
  • It can be a gift option

A minimal head might look like this:

<meta property="og:title" content="Open Graph Types">
<meta property="og:description" content="How to choose the correct Open Graph object type.">
<meta property="og:url" content="https://example.com/open-graph-types">
<meta property="og:image" content="https://example.com/images/open-graph-types.png">
<meta property="og:type" content="article">

The protocol’s basic metadata belongs in the document’s <head>. Type-specific fields should be added only when they apply to the selected object.

What are the Open Graph types?

The official documentation organizes built-in types into global verticals. Global vertical names use a period between the family and subtype, such as video.movie. The documented global types and their notable properties are:

Family or type Values Use it for Type-specific information documented by the protocol
Music music.song, music.album, music.playlist, music.radio_station Songs, albums, playlists, or radio stations Depending on the subtype: duration, album or song relationships, track positions, musicians, creators, and release dates
Video video.movie, video.episode, video.tv_show, video.other Movies, episodes, television shows, or other video objects Actors and roles, directors, writers, duration, release date, tags, and— for an episode—the series it belongs to
Article article A published article, post, or similar editorial object Publication, modification, and expiration times; author; section; and tags
Book book A book object Author, ISBN, release date, and tags
Profile profile A person’s profile object First name, last name, username, and gender
Website website A general website or a page without a more specific documented object type No extra type-specific properties beyond the basic Open Graph set

These names and property definitions come from the official Open Graph type documentation. Do not assume that a property from one family applies to another; use the fields documented for the selected type.

How should I choose a type?

  1. Identify the represented object. Ask what a visitor would say the URL is: a story, a book, a user profile, a song, a movie, or the site itself.
  2. Select the most specific documented value. A movie should be video.movie, not the generic video.other; a song should be music.song, not website.
  3. Add the matching properties. Supply article dates and authors for an article, book details for a book, or the applicable media fields for music and video.
  4. Leave unrelated fields out. More tags do not make a type more accurate. A field is useful only when it belongs to that object family and has a truthful value.

Should this page be website or article?

Use article when the URL represents an article or post and you can describe its editorial metadata. Use website for a homepage, a general site landing page, or another page that is not represented by a more specific documented type. The protocol states that a page with no markup should be treated as website.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A CMS may map templates differently. For example, Yoast documents website for a homepage, profile for user profile pages, and article for posts and other templates. That is Yoast’s implementation convention, not a universal rule for every CMS (Yoast OpenGraph functional specification).

What if no built-in type fits?

The protocol supports a custom type in CURIE-style form, such as my_namespace:my_type. Declare the namespace with a prefix attribute on the document’s <head>. This syntax is distinct from the period-separated names used by the documented global verticals: video.movie is a global type, while my_namespace:my_type is the custom form.

Global vertical types in detail

Music types

Choose the subtype that matches the object, rather than treating every music URL as a generic album or website. A song, album, playlist, and radio station are separate documented objects. Their associated metadata can describe relationships between songs and albums, track positions, duration, musicians, creators, and release dates. Only include the fields relevant to the chosen subtype.

Video types

video.movie, video.episode, video.tv_show, and video.other distinguish the video object. The protocol documents fields for people and roles, directors, writers, duration, release date, and tags. An episode also has a relationship to the series it belongs to. A standalone film therefore should not be modeled as an episode merely because both are video.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Article, book, and profile

An article can carry publication, modification, and expiration timestamps, author, section, and tags. A book can carry author, ISBN, release date, and tags. A profile can carry a person’s first name, last name, username, and gender. Those property sets describe different objects; do not mix them simply because a page contains similar text.

Implementing Open Graph types

Static HTML

Place one og:type declaration in the head generated for each URL. For an article:

<head>
  <meta property="og:title" content="A Practical Guide">
  <meta property="og:type" content="article">
  <meta property="article:published_time" content="2026-09-29T09:00:00Z">
  <meta property="article:author" content="https://example.com/authors/alex">
  <meta property="article:section" content="Technology">
</head>

Use the actual values for the page. The example illustrates where article-specific fields belong; it does not make every article’s dates, author, or section mandatory beyond the basic Open Graph requirements.

Server-rendered or CMS templates

Set the type from the content model, not from the URL pattern alone. A template that renders a post can emit article, while a homepage template can emit website. If your CMS plugin supplies the tags, inspect its documented mapping and override it only when the page’s represented object differs from the default.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Sale
Web Design with HTML, CSS, JavaScript and jQuery Set
  • Brand: Wiley
  • Set of 2 Volumes
  • A handy two-book set that uniquely combines related technologies Highly visual format and accessible language makes these books highly effective learning tools Perfect for beginning web designers and front-end developers

Single-page applications

Ensure the initial HTML response contains the tags in the <head>, rather than relying exclusively on JavaScript that runs after load. Consumers that fetch the URL may not execute your application code in the same way as a normal browser. Render the correct type for each route and keep the server output synchronized with the visible page.

Common mistakes and fixes

  • Using a URL label as the type: A URL such as /blog/ does not automatically make every page an article. Choose based on the represented object.
  • Using website everywhere: This discards the documented article, book, profile, music, or video distinctions. Use a specific type when it truthfully applies.
  • Confusing periods and colons: Periods identify documented global vertical types such as music.song; a custom type uses a colon and a declared namespace.
  • Adding the wrong properties: Type-specific fields vary. Remove fields that belong to another family instead of hoping consumers will infer your intent.
  • Duplicate declarations: Multiple competing og:type tags can make the result ambiguous. Emit one authoritative value per page.
  • Stale template output: If a page changed from a post to a landing page, clear the CMS or edge cache and inspect the delivered HTML, not only the editor preview.
  • Missing head markup: Verify that the response includes the tags before client-side rendering. A page without markup is treated as website by the protocol.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Preview the finished page before publishing

To verify a type in practice, request the final URL, inspect the raw HTML head, and confirm that the title, URL, image, and type describe the same object. Check a representative URL for every template—homepage, article, profile, and media page—because a correct one-off tag does not prove that the CMS mapping is correct site-wide.

Or skip the browser setup

ScreenshotNeo can capture the rendered page through one request while you inspect the visual result. Before capture it accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be disabled. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status in X-Page-Verdict and X-Billed headers. It also provides an MCP server with take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.

Use the ScreenshotNeo documentation for the full option list. A direct cURL request is:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.

Performance, reliability, and cost considerations

Open Graph types themselves are metadata strings; they do not require a separate service or runtime dependency. The practical reliability work is template consistency: generate tags in the initial response, keep values synchronized with the page, and test each content model after template changes. If you use a screenshot service to inspect rendered output, control waits, caching, and resource blocking according to the page’s behavior. ScreenshotNeo supports selector or delay waits, network-idle waits, custom headers and cookies, cache TTLs, bulk capture of up to 100 URLs per call, asynchronous jobs with signed webhooks, and a usage API; these options are available on every plan.

ScreenshotNeo’s listed plans are Free (1,000 shots/month), Starter ($5 for 3,000), Growth ($15 for 15,000), Pro ($39 for 60,000), Scale ($99 for 250,000), and Business ($249 for 1,000,000). Yearly billing gives two months free. These prices and allowances are plan terms, not a claim about Open Graph performance.

Frequently Asked Questions

Is og:type required?

The Open Graph protocol lists og:type among the required basic properties. Choose the value that describes the represented object.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can I invent a value such as blog?

Use a documented global type or the documented custom CURIE-style form with a declared namespace. Do not substitute an undeclared label for a global type.

What type should a product page use?

The documented type list does not define a product type. Use the type that truthfully represents the page—often website unless your implementation has a documented, appropriate custom type.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.