--- obj: concept website: https://ogp.me rev: 2024-12-16 --- # The Open Graph protocol The [Open Graph protocol](https://ogp.me/) enables any web page to become a rich object in a social graph. For instance, this is used on Facebook to allow any web page to have the same functionality as any other object on Facebook. ## Basic Metadata To turn your web pages into graph objects, you need to add basic metadata to your page. Which means that you'll place additional `` tags in the `` of your web page. The four required properties for every page are: - `og:title` - The title of your object as it should appear within the graph, e.g., "The Rock". - `og:type` - The type of your object, e.g., `video.movie`. Depending on the type you specify, other properties may also be required. - `og:image` - An image URL which should represent your object within the graph. - `og:url` - The canonical URL of your object that will be used as its permanent ID in the graph, e.g., "https://www.imdb.com/title/tt0117500/". As an example, the following is the Open Graph protocol markup for [The Rock on IMDB](https://www.imdb.com/title/tt0117500/): ```html The Rock (1996) ... ... ``` ### Optional Metadata The following properties are optional for any object and are generally recommended: - `og:audio` - A URL to an audio file to accompany this object. - `og:description` - A one to two sentence description of your object. - `og:determiner` - The word that appears before this object's title in a sentence. An enum of (`a`, `an`, `the`, `""`, `auto`). If `auto` is chosen, the consumer of your data should chose between `a` or `an`. Default is `""` (blank). - `og:locale` - The locale these tags are marked up in. Of the format `language_TERRITORY`. Default is `en_US`. - `og:locale:alternate` - An array of other locales this page is available in. - `og:site_name` - If your object is part of a larger web site, the name which should be displayed for the overall site. e.g., "IMDb". - `og:video` - A URL to a video file that complements this object. For example (line-break solely for display purposes): ```html ``` ## Structured Properties Some properties can have extra metadata attached to them. These are specified in the same way as other metadata with `property` and `content`, but the `property` will have extra `:`. The `og:image` property has some optional structured properties: - `og:image:url` - Identical to `og:image`. - `og:image:secure_url` - An alternate url to use if the webpage requires HTTPS. - `og:image:type` - A MIME type for this image. - `og:image:width` - The number of pixels wide. - `og:image:height` - The number of pixels high. - `og:image:alt` - A description of what is in the image (not a caption). If the page specifies an og:image it should specify `og:image:alt`. A full image example: ```html ``` The `og:video` tag has the identical tags as `og:image`. Here is an example: ```html ``` The `og:audio` tag only has the first 3 properties available (since size doesn't make sense for sound): ```html ``` ## Arrays If a tag can have multiple values, just put multiple versions of the same `` tag on your page. The first tag (from top to bottom) is given preference during conflicts. ```html ``` Put structured properties after you declare their root tag. Whenever another root element is parsed, that structured property is considered to be done and another one is started. For example: ```html ``` means there are 3 images on this page, the first image is `300x300`, the middle one has unspecified dimensions, and the last one is `1000px` tall. ## Object Types In order for your object to be represented within the graph, you need to specify its type. This is done using the `og:type` property: ```html ``` When the community agrees on the schema for a type, it is added to the list of global types. All other objects in the type system are CURIEs of the form. ```html ``` The global types are grouped into verticals. Each vertical has its own namespace. The `og:type` values for a namespace are always prefixed with the namespace and then a period. This is to reduce confusion with user-defined namespaced types which always have colons in them. ### Music - Namespace URI: [`https://ogp.me/ns/music#`](https://ogp.me/ns/music) `og:type` values: [`music.song`](https://ogp.me/#type_music.song) - `music:duration` - [integer](https://ogp.me/#integer) >=1 - The song's length in seconds. - `music:album` - [music.album](https://ogp.me/#type_music.album) [array](https://ogp.me/#array) - The album this song is from. - `music:album:disc` - [integer](https://ogp.me/#integer) >=1 - Which disc of the album this song is on. - `music:album:track` - [integer](https://ogp.me/#integer) >=1 - Which track this song is. - `music:musician` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - The musician that made this song. [`music.album`](https://ogp.me/#type_music.album) - `music:song` - [music.song](https://ogp.me/#type_music.song) - The song on this album. - `music:song:disc` - [integer](https://ogp.me/#integer) >=1 - The same as `music:album:disc` but in reverse. - `music:song:track` - [integer](https://ogp.me/#integer) >=1 - The same as `music:album:track` but in reverse. - `music:musician` - [profile](https://ogp.me/#type_profile) - The musician that made this song. - `music:release_date` - [datetime](https://ogp.me/#datetime) - The date the album was released. [`music.playlist`](https://ogp.me/#type_music.playlist) - `music:song` - Identical to the ones on [music.album](https://ogp.me/#type_music.album) - `music:song:disc` - `music:song:track` - `music:creator` - [profile](https://ogp.me/#type_profile) - The creator of this playlist. [`music.radio_station`](https://ogp.me/#type_music.radio_station) - `music:creator` - [profile](https://ogp.me/#type_profile) - The creator of this station. ### Video - Namespace URI: [`https://ogp.me/ns/video#`](https://ogp.me/ns/video) `og:type` values: [`video.movie`](https://ogp.me/#type_video.movie) - `video:actor` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Actors in the movie. - `video:actor:role` - [string](https://ogp.me/#string) - The role they played. - `video:director` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Directors of the movie. - `video:writer` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Writers of the movie. - `video:duration` - [integer](https://ogp.me/#integer) >=1 - The movie's length in seconds. - `video:release_date` - [datetime](https://ogp.me/#datetime) - The date the movie was released. - `video:tag` - [string](https://ogp.me/#string) [array](https://ogp.me/#array) - Tag words associated with this movie. [`video.episode`](https://ogp.me/#type_video.episode) - `video:actor` - Identical to [video.movie](https://ogp.me/#type_video.movie) - `video:actor:role` - `video:director` - `video:writer` - `video:duration` - `video:release_date` - `video:tag` - `video:series` - [video.tv_show](https://ogp.me/#type_video.tv_show) - Which series this episode belongs to. [`video.tv_show`](https://ogp.me/#type_video.tv_show) A multi-episode TV show. The metadata is identical to [video.movie](https://ogp.me/#type_video.movie). [`video.other`](https://ogp.me/#type_video.other) A video that doesn't belong in any other category. The metadata is identical to [video.movie](https://ogp.me/#type_video.movie). ### No Vertical These are globally defined objects that just don't fit into a vertical but yet are broadly used and agreed upon. `og:type` values: [`article`](https://ogp.me/#type_article) - Namespace URI: [`https://ogp.me/ns/article#`](https://ogp.me/ns/article) - `article:published_time` - [datetime](https://ogp.me/#datetime) - When the article was first published. - `article:modified_time` - [datetime](https://ogp.me/#datetime) - When the article was last changed. - `article:expiration_time` - [datetime](https://ogp.me/#datetime) - When the article is out of date after. - `article:author` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Writers of the article. - `article:section` - [string](https://ogp.me/#string) - A high-level section name. E.g. Technology - `article:tag` - [string](https://ogp.me/#string) [array](https://ogp.me/#array) - Tag words associated with this article. [`book`](https://ogp.me/#type_book) - Namespace URI: [`https://ogp.me/ns/book#`](https://ogp.me/ns/book) - `book:author` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Who wrote this book. - `book:isbn` - [string](https://ogp.me/#string) - The [ISBN](https://en.wikipedia.org/wiki/International_Standard_Book_Number) - `book:release_date` - [datetime](https://ogp.me/#datetime) - The date the book was released. - `book:tag` - [string](https://ogp.me/#string) [array](https://ogp.me/#array) - Tag words associated with this book. [`profile`](https://ogp.me/#type_profile) - Namespace URI: [`https://ogp.me/ns/profile#`](https://ogp.me/ns/profile) - `profile:first_name` - [string](https://ogp.me/#string) - A name normally given to an individual by a parent or self-chosen. - `profile:last_name` - [string](https://ogp.me/#string) - A name inherited from a family or marriage and by which the individual is commonly known. - `profile:username` - [string](https://ogp.me/#string) - A short unique string to identify them. - `profile:gender` - [enum](https://ogp.me/#enum)(male, female) - Their gender. [`website`](https://ogp.me/#type_website) - Namespace URI: [`https://ogp.me/ns/website#`](https://ogp.me/ns/website) No additional properties other than the basic ones. Any non-marked up webpage should be treated as `og:type` website. ## Types The following types are used when defining attributes in Open Graph protocol. | **Type** | **Description** | **Literals** | | -------- | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | | Boolean | A Boolean represents a true or false value | true, false, 1, 0 | | DateTime | A DateTime represents a temporal value composed of a date (year, month, day) and an optional time component (hours, minutes) | ISO 8601 | | Enum | A type consisting of bounded set of constant string values (enumeration members). | A string value that is a member of the enumeration | | Float | A 64-bit signed floating point number | All literals that conform to the following formats: `1.234`, `-1.234`, `1.2e3`, `-1.2e3`, `7E-10` | | Integer | A 32-bit signed integer. | All literals that conform to the following formats: `1234`, `-123` | | String | A sequence of Unicode characters | All literals composed of Unicode characters with no escape characters | | URL | A sequence of Unicode characters that identify an Internet resource. | All valid URLs that utilize the `http://` or `https://` protocols |