{"id":28487190,"url":"https://github.com/rehypejs/rehype-meta","last_synced_at":"2025-10-09T18:34:19.708Z","repository":{"id":36467673,"uuid":"226287856","full_name":"rehypejs/rehype-meta","owner":"rehypejs","description":"plugin to add metadata to the head of a document","archived":false,"fork":false,"pushed_at":"2024-07-17T13:24:22.000Z","size":108,"stargazers_count":34,"open_issues_count":0,"forks_count":3,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-06-07T09:41:29.400Z","etag":null,"topics":["document","head","meta","open-graph","rehype","rehype-plugin","twitter"],"latest_commit_sha":null,"homepage":"https://unifiedjs.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rehypejs.png","metadata":{"funding":{"github":"unifiedjs","open_collective":"unified"},"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-06T09:04:00.000Z","updated_at":"2025-01-16T05:56:17.000Z","dependencies_parsed_at":"2024-06-18T22:45:41.507Z","dependency_job_id":"4d1192b0-ecec-45e4-bf6a-e3d801372a5f","html_url":"https://github.com/rehypejs/rehype-meta","commit_stats":{"total_commits":63,"total_committers":1,"mean_commits":63.0,"dds":0.0,"last_synced_commit":"74cb65ad13ba3540358543f73914f881c6b95fa2"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/rehypejs/rehype-meta","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehypejs%2Frehype-meta","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehypejs%2Frehype-meta/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehypejs%2Frehype-meta/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehypejs%2Frehype-meta/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rehypejs","download_url":"https://codeload.github.com/rehypejs/rehype-meta/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehypejs%2Frehype-meta/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263006997,"owners_count":23398741,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["document","head","meta","open-graph","rehype","rehype-plugin","twitter"],"created_at":"2025-06-08T04:12:12.377Z","updated_at":"2025-10-09T18:34:14.673Z","avatar_url":"https://github.com/rehypejs.png","language":"JavaScript","funding_links":["https://github.com/sponsors/unifiedjs","https://opencollective.com/unified"],"categories":[],"sub_categories":[],"readme":"# rehype-meta\n\n[![Build][build-badge]][build]\n[![Coverage][coverage-badge]][coverage]\n[![Downloads][downloads-badge]][downloads]\n[![Size][size-badge]][size]\n[![Sponsors][sponsors-badge]][collective]\n[![Backers][backers-badge]][collective]\n[![Chat][chat-badge]][chat]\n\n**[rehype][]** plugin to add metadata to the `\u003chead\u003e`.\n\n## Contents\n\n* [What is this?](#what-is-this)\n* [When should I use this?](#when-should-i-use-this)\n* [Install](#install)\n* [Use](#use)\n* [API](#api)\n  * [`unified().use(rehypeMeta[, options])`](#unifieduserehypemeta-options)\n  * [`Image`](#image)\n  * [`Options`](#options)\n* [Metadata](#metadata)\n* [Examples](#examples)\n  * [Example: frontmatter in markdown](#example-frontmatter-in-markdown)\n  * [Example: inferring metadata](#example-inferring-metadata)\n* [Types](#types)\n* [Compatibility](#compatibility)\n* [Security](#security)\n* [Related](#related)\n* [Contribute](#contribute)\n* [License](#license)\n\n## What is this?\n\nThis package is a [unified][] ([rehype][]) plugin to manage the metadata (Open\nGraph, Twitter Cards, SEO, etc.) that can be found in `\u003chead\u003e`.\nIt focusses on reasonable and useful metadata that is supported by several and\npopular vendors instead of every possible field supported somewhere.\n\n**unified** is a project that transforms content with abstract syntax trees\n(ASTs).\n**rehype** adds support for HTML to unified.\n**hast** is the HTML AST that rehype uses.\nThis is a rehype plugin that adds metadata to the head in the tree.\n\n## When should I use this?\n\nThis plugin is particularly useful as a metadata manager when you’re working\nwith articles that are supposed to be shared on the web, whether it’s on Twitter\nor Slack.\nYou can define key/value pairs, either with frontmatter, with other plugins, or\nas options, and this plugin will generate the HTML used by different services.\n\nThis plugin works on complete documents (not fragments).\nA different plugin, [`rehype-document`][rehype-document], wraps fragments in\ndocuments.\n\n## Install\n\nThis package is [ESM only][esm].\nIn Node.js (version 16+), install with [npm][]:\n\n```sh\nnpm install rehype-meta\n```\n\nIn Deno with [`esm.sh`][esmsh]:\n\n```js\nimport rehypeMeta from 'https://esm.sh/rehype-meta@4'\n```\n\nIn browsers with [`esm.sh`][esmsh]:\n\n```html\n\u003cscript type=\"module\"\u003e\n  import rehypeMeta from 'https://esm.sh/rehype-meta@4?bundle'\n\u003c/script\u003e\n```\n\n## Use\n\nSay our module `example.js` looks as follows:\n\n```js\nimport {rehype} from 'rehype'\nimport rehypeMeta from 'rehype-meta'\n\nconst file = await rehype()\n  .data('settings', {fragment: true})\n  .use(rehypeMeta, {\n    author: 'Jane Doe',\n    authorFacebook: 'janedoe',\n    authorTwitter: '@jane',\n    copyright: true,\n    description:\n      'The city has changed drastically over the past 40 years, yet the M.T.A. map designed in 1979 has largely endured.',\n    image: {\n      alt: 'M.T.A. map designed in 1979',\n      height: '550',\n      url: 'https://static01.nyt.com/images/2019/12/02/autossell/mta-promo-image/mta-crop-facebookJumbo.jpg',\n      width: '1050'\n    },\n    modified: '2019-12-03T19:13:00.000Z',\n    name: 'The New York Times',\n    og: true,\n    origin: 'https://www.nytimes.com',\n    pathname: '/interactive/2019/12/02/nyregion/nyc-subway-map.html',\n    published: '2019-12-02T10:00:00.000Z',\n    readingTime: 11.1,\n    section: 'New York',\n    separator: ' | ',\n    siteAuthor: 'The New York Times',\n    siteTags: [\n      'US Politics',\n      'Impeachment',\n      'NATO',\n      'London',\n      'Food',\n      'Poverty',\n      'Climate Change',\n      'Global Warming'\n    ],\n    siteTwitter: '@nytimes',\n    tags: [\n      'Subway',\n      'Map',\n      'Public Transit',\n      'Design',\n      'MTA',\n      'Massimo Vignelli',\n      'NYC'\n    ],\n    title:\n      'The New York City Subway Map as You’ve Never Seen It Before',\n    twitter: true,\n    type: 'article'\n  })\n  .process('')\n\nconsole.log(String(file))\n```\n\n…now running `node example.js` yields:\n\n```html\n\u003chead\u003e\n\u003ctitle\u003eThe New York City Subway Map as You’ve Never Seen It Before | The New York Times\u003c/title\u003e\n\u003clink rel=\"canonical\" href=\"https://www.nytimes.com/interactive/2019/12/02/nyregion/nyc-subway-map.html\"\u003e\n\u003cmeta name=\"description\" content=\"The city has changed drastically over the past 40 years, yet the M.T.A. map designed in 1979 has largely endured.\"\u003e\n\u003cmeta name=\"keywords\" content=\"Subway, Map, Public Transit, Design, MTA, Massimo Vignelli, NYC, US Politics, Impeachment, NATO, London, Food, Poverty, Climate Change, Global Warming\"\u003e\n\u003cmeta name=\"author\" content=\"Jane Doe\"\u003e\n\u003cmeta name=\"copyright\" content=\"© 2019 Jane Doe\"\u003e\n\u003cmeta property=\"og:type\" content=\"article\"\u003e\n\u003cmeta property=\"og:site_name\" content=\"The New York Times\"\u003e\n\u003cmeta property=\"og:url\" content=\"https://www.nytimes.com/interactive/2019/12/02/nyregion/nyc-subway-map.html\"\u003e\n\u003cmeta property=\"og:title\" content=\"The New York City Subway Map as You’ve Never Seen It Before\"\u003e\n\u003cmeta property=\"og:description\" content=\"The city has changed drastically over the past 40 years, yet the M.T.A. map designed in 1979 has largely endured.\"\u003e\n\u003cmeta property=\"og:image\" content=\"https://static01.nyt.com/images/2019/12/02/autossell/mta-promo-image/mta-crop-facebookJumbo.jpg\"\u003e\n\u003cmeta property=\"og:image:alt\" content=\"M.T.A. map designed in 1979\"\u003e\n\u003cmeta property=\"og:image:width\" content=\"1050\"\u003e\n\u003cmeta property=\"og:image:height\" content=\"550\"\u003e\n\u003cmeta property=\"article:published_time\" content=\"2019-12-02T10:00:00.000Z\"\u003e\n\u003cmeta property=\"article:modified_time\" content=\"2019-12-03T19:13:00.000Z\"\u003e\n\u003cmeta property=\"article:author\" content=\"https://www.facebook.com/janedoe\"\u003e\n\u003cmeta property=\"article:section\" content=\"New York\"\u003e\n\u003cmeta property=\"article:tag\" content=\"Subway\"\u003e\n\u003cmeta property=\"article:tag\" content=\"Map\"\u003e\n\u003cmeta property=\"article:tag\" content=\"Public Transit\"\u003e\n\u003cmeta property=\"article:tag\" content=\"Design\"\u003e\n\u003cmeta property=\"article:tag\" content=\"MTA\"\u003e\n\u003cmeta property=\"article:tag\" content=\"Massimo Vignelli\"\u003e\n\u003cmeta name=\"twitter:card\" content=\"summary_large_image\"\u003e\n\u003cmeta name=\"twitter:image\" content=\"https://static01.nyt.com/images/2019/12/02/autossell/mta-promo-image/mta-crop-facebookJumbo.jpg\"\u003e\n\u003cmeta name=\"twitter:image:alt\" content=\"M.T.A. map designed in 1979\"\u003e\n\u003cmeta name=\"twitter:site\" content=\"@nytimes\"\u003e\n\u003cmeta name=\"twitter:creator\" content=\"@jane\"\u003e\n\u003cmeta name=\"twitter:label1\" content=\"Posted in\"\u003e\n\u003cmeta name=\"twitter:data1\" content=\"New York\"\u003e\n\u003cmeta name=\"twitter:label2\" content=\"Reading time\"\u003e\n\u003cmeta name=\"twitter:data2\" content=\"12 minutes\"\u003e\n\u003c/head\u003e\n```\n\n## API\n\nThis package exports no identifiers.\nThe default export is [`rehypeMeta`][api-rehype-meta].\n\n### `unified().use(rehypeMeta[, options])`\n\nAdd metadata to the `\u003chead\u003e`.\n\n###### Parameters\n\n* `options` ([`Options`][api-options], optional)\n  — configuration\n\n###### Returns\n\nTransform ([`Transformer`][unified-transformer]).\n\n##### Notes\n\n###### Algorithm\n\n* adds a `\u003chead\u003e` if one doesn’t already exist\n* overwrites existing metadata in `\u003chead\u003e` (for example, when a `\u003ctitle\u003e`\n  already exists, it’s updated)\n\n###### Config\n\nThere are three ways to configure the metadata of a document.\n\n1. pass an object as `options` when [using `rehypeMeta`][api-rehype-meta]\n2. define it in YAML front matter (by integrating with\n   [`vfile-matter`][vfile-matter])\n3. define an object at `file.data.meta`\n\nConfiguration is created by extending the defaults, with these objects, in the\nabove order (so `file.data.meta` is preferred over `options`).\nOnly `options` is enough if every file has the same metadata.\nIf your workflow enables front matter, that’s a good way to keep data in files.\nAlternatively, do it yourself by adding data at `file.data.meta`, which can also\nbe done by plugins:\n\n* [`rehype-infer-description-meta`](https://github.com/rehypejs/rehype-infer-description-meta)\n  — infer [`description`][o-description] from the document\n* [`rehype-infer-reading-time-meta`](https://github.com/rehypejs/rehype-infer-reading-time-meta)\n  — infer [`readingTime`][o-reading-time] from the document\n* [`rehype-infer-title-meta`](https://github.com/rehypejs/rehype-infer-title-meta)\n  — infer [`title`][o-title] from the document\n* [`unified-infer-git-meta`](https://github.com/unifiedjs/unified-infer-git-meta)\n  — infer [`author`][o-author], [`modified`][o-modified], and\n  [`published`][o-published] from Git\n\n### `Image`\n\nImage metadata (TypeScript type).\n\n###### Fields\n\n* `alt` (`string`, optional, example: `'M.T.A. map designed in 1979'`)\n  — alt text of image\n* `height` (`number | string`, optional, example: `'550'`)\n  — height of image\n* `url` (`string`, required, example:\n  `'https://static01.nyt.com/images/…/mta-crop-jumbo.jpg'`)\n  — URL of image\n* `width` (`number | string`, optional, example: `'1050'`)\n  — width of image\n\n### `Options`\n\nConfiguration (TypeScript type).\n\n##### Fields\n\n###### `author`\n\nName of the author of the document (`string`, optional, example:\n`'Jane Doe'`).\n\nAffects: [`meta[name=author]`][m-author], [`meta[name=copyright]`][m-copyright].\n\n###### `authorFacebook`\n\nFacebook username of the author of the document (`string`, optional, example:\n`'example'`).\n\nAffects: [`meta[property=article:author]`][m-article-author].\n\n###### `authorTwitter`\n\nTwitter username of the author of the document (`string`, optional, example:\n`'@janedoe'`).\n\nAffects: [`meta[name=twitter:creator]`][m-twitter-creator].\n\n###### `color`\n\nHexadecimal theme color of document or site (`string`, optional, example:\n`'#bada55'`).\n\nAffects: [`meta[name=theme-color]`][m-theme-color].\n\n###### `copyright`\n\nWhether to add copyright metadata (`boolean`, default: `false`).\n\nAffects: [`meta[name=copyright]`][m-copyright].\n\n###### `description`\n\nDescription of the document (`string`, optional, example:\n`'The city has changed drastically over the past 40 years,\nyet the M.T.A. map designed in 1979 has largely endured.'`).\n\nAffects: [`meta[name=description]`][m-description],\n[`meta[property=og:description]`][m-og-description].\n\n###### `image`\n\nOne or more images associated with the document\n(`Array\u003cImage | string\u003e | Image | string`, optional); if strings are\npassed, they are seen as `Image` objects with a `url` field set to that\nvalue.\n\nAffects: [`meta[property=og:image]`][m-og-image],\n[`meta[name=twitter:card]`][m-twitter-card],\n[`meta[name=twitter:image]`][m-twitter-image].\n\n###### `modified`\n\nDate the document was last modified (`Date` or `string`, optional, example:\n`'2019-12-03T19:13:00.000Z'`).\n\n\u003e 👉 **Note**: parsing a string is [inconsistent][timestamp], prefer dates.\n\nAffects: [`meta[property=article:modified_time]`][m-article-modified-time].\n\n###### `name`\n\nName of the whole site (`string`, optional, example: `'The New York Times'`).\n\nAffects: [`title`][m-title], [`meta[property=og:site_name]`][m-og-site-name],\n[`meta[property=og:title]`][m-og-title].\n\n###### `og`\n\nWhether to add Open Graph metadata (`boolean`, default: `false`).\n\nAffects: [`meta[property=og:site_name]`][m-og-site-name],\n[`meta[property=og:url]`][m-og-url],\n[`meta[property=og:title]`][m-og-title],\n[`meta[property=og:description]`][m-og-description],\n[`meta[property=og:image]`][m-og-image],\n[`meta[property=article:published_time]`][m-article-published-time],\n[`meta[property=article:modified_time]`][m-article-modified-time],\n[`meta[property=article:author]`][m-article-author],\n[`meta[property=article:section]`][m-article-section],\n[`meta[property=article:tag]`][m-article-tag],\n[`meta[name=twitter:card]`][m-twitter-card].\n\n###### `ogNameInTitle`\n\nWhether to add the site name `name` to the `og:title` (`boolean`, default:\n`false`).\n\nAffects: [`meta[property=og:title]`][m-og-title].\n\n###### `origin`\n\nOrigin the file will be hosted on (`string`, optional, example:\n`https://www.nytimes.com`).\n\nAffects: [`link[rel=canonical]`][m-canonical],\n[`meta[property=og:url]`][m-og-url].\n\n###### `pathname`\n\nAbsolute pathname of where the file will be hosted (`string`, default: `/`,\nexample: `/interactive/2019/12/02/nyregion/nyc-subway-map.html`).\n\nAffects: [`link[rel=canonical]`][m-canonical],\n[`meta[property=og:url]`][m-og-url].\n\n###### `published`\n\nDate the document (or site) was first published (`Date` or `string`, optional,\nexample: `'2019-12-02T10:00:00.000Z'`).\n\n\u003e 👉 **Note**: parsing a string is [inconsistent][timestamp], prefer dates.\n\nAffects: [`meta[name=copyright]`][m-copyright],\n[`meta[property=article:published_time]`][m-article-published-time].\n\n###### `readingTime`\n\nEstimated reading time in minutes for the document (`[number, number]` or\n`number`, optional, example: `1.219403`).\nIf two numbers are given, they represent a range of two estimates.\n\nAffects: [`meta[name=twitter:label1]`][m-twitter-label1],\n[`meta[name=twitter:data1]`][m-twitter-data1],\n[`meta[name=twitter:label2]`][m-twitter-label2],\n[`meta[name=twitter:data2]`][m-twitter-data2].\n\n###### `section`\n\nSection associated with the document (`string`, optional, example:\n`'New York'`).\n\nAffects: [`meta[property=article:section]`][m-article-section], [`meta[name=twitter:label1]`][m-twitter-label1],\n[`meta[name=twitter:data1]`][m-twitter-data1].\n\n###### `separator`\n\nValue to use to join the `title` and `name` together (`string`, default:\n`' - '`).\n\nAffects: [`title`][m-title], [`meta[property=og:title]`][m-og-title].\n\n###### `siteAuthor`\n\nName of the author of the whole site (`string`, optional, example:\n`'The New York Times'`).\n\nAffects: [`meta[name=author]`][m-author], [`meta[name=copyright]`][m-copyright].\n\n###### `siteTags`\n\nTags associated with the whole site (`Array\u003cstring\u003e`, optional, example:\n`['US Politics', 'Impeachment', 'NATO', 'London', 'Food', 'Poverty', 'Climate\nChange', 'Global Warming']`).\n\nAffects: [`meta[name=keywords]`][m-keywords].\n\n###### `siteTwitter`\n\nTwitter username of the whole site (`string`, optional, example: `'@nytimes'`).\n\nAffects: [`meta[name=twitter:site]`][m-twitter-site].\n\n###### `tags`\n\nTags associated with the document (`Array\u003cstring\u003e`, optional, example:\n`['Subway', 'Map', 'Public Transit', 'Design', 'MTA', 'Massimo Vignelli',\n'NYC']`).\n\nAffects: [`meta[name=keywords]`][m-keywords],\n[`meta[property=article:tag]`][m-article-tag].\n\n###### `title`\n\nTitle of the document (`string`, optional, example: `'The New York City Subway\nMap as You’ve Never Seen It Before'`).\n\nAffects: [`title`][m-title], [`meta[property=og:title]`][m-og-title].\n\n###### `twitter`\n\nWhether to add Twitter metadata (`boolean`, default: `false`).\n\nAffects: [`meta[name=twitter:card]`][m-twitter-card],\n[`meta[name=twitter:image]`][m-twitter-image],\n[`meta[name=twitter:site]`][m-twitter-site],\n[`meta[name=twitter:creator]`][m-twitter-creator],\n[`meta[name=twitter:label1]`][m-twitter-label1],\n[`meta[name=twitter:data1]`][m-twitter-data1],\n[`meta[name=twitter:label2]`][m-twitter-label2],\n[`meta[name=twitter:data2]`][m-twitter-data2].\n\n###### `type`\n\nWhat the document refers to (`'article' | 'website'`, default: `'website'`).\n\nAffects: [`meta[property=og:type]`][m-og-type],\n[`meta[property=article:published_time]`][m-article-published-time],\n[`meta[property=article:modified_time]`][m-article-modified-time],\n[`meta[property=article:author]`][m-article-author],\n[`meta[property=article:section]`][m-article-section],\n[`meta[property=article:tag]`][m-article-tag].\n\n## Metadata\n\nThe following metadata can be added by `rehype-meta`.\n\n###### `link[rel=canonical]`\n\nAffected by: [`origin`][o-origin], [`pathname`][o-path-name].\n\nIf `origin` is `'https://example.com'` and `path` is `'/path/'`:\n\n```html\n\u003clink rel=\"canonical\" href=\"https://example.com/path/\"\u003e\n```\n\nIf `origin` is `'https://example.com'` and `path` is not set:\n\n```html\n\u003clink rel=\"canonical\" href=\"https://example.com/\"\u003e\n```\n\n###### `meta[name=author]`\n\nAffected by: [`author`][o-author], [`siteAuthor`][o-site-author].\n\nIf `author` is `'Jane'`:\n\n```html\n\u003cmeta name=\"author\" content=\"Jane\"\u003e\n```\n\nIf `siteAuthor` is `'John'`:\n\n```html\n\u003cmeta name=\"author\" content=\"John\"\u003e\n```\n\nIf `author` is `'Jane'` and `siteAuthor` is `'John'`:\n\n```html\n\u003cmeta name=\"author\" content=\"Jane\"\u003e\n```\n\n###### `meta[name=copyright]`\n\nAffected by: [`copyright`][o-copyright], [`author`][o-author],\n[`siteAuthor`][o-site-author], [`published`][o-published].\n\nThe below examples depend on the current date, so for example purposes, say it\nwas the year 2030.\n\nIf `copyright` is not `true`, `meta[name=copyright]` is not added.\n\nIf `copyright` is `true` and `author` is `'Jane'`:\n\n```html\n\u003cmeta name=\"copyright\" content=\"© 2030 Jane\"\u003e\n```\n\nIf `copyright` is `true` and `siteAuthor` is `'John'`:\n\n```html\n\u003cmeta name=\"copyright\" content=\"© 2030 John\"\u003e\n```\n\nIf `copyright` is `true`, `author` is `'Jane'`, and `siteAuthor` is `'John'`:\n\n```html\n\u003cmeta name=\"copyright\" content=\"© 2030 Jane\"\u003e\n```\n\nIf `copyright` is `true`, `author` is `'Jane'`, and `published` is `'2015'`:\n\n```html\n\u003cmeta name=\"copyright\" content=\"© 2015 Jane\"\u003e\n```\n\n###### `meta[name=description]`\n\nAffected by: [`description`][o-description].\n\nIf `description` is `'Lorem ipsum'`:\n\n```html\n\u003cmeta name=\"description\" content=\"Lorem ipsum\"\u003e\n```\n\n###### `meta[name=keywords]`\n\nAffected by: [`tags`][o-tags], [`siteTags`][o-site-tags].\n\nIf `tags` is `['a', 'b']`:\n\n```html\n\u003cmeta name=\"keywords\" content=\"a, b\"\u003e\n```\n\nIf `siteTags` is `['b', 'c']`:\n\n```html\n\u003cmeta name=\"keywords\" content=\"b, c\"\u003e\n```\n\nIf `tags` is `['a', 'b']` and `siteTags` is `['b', 'c']`:\n\n```html\n\u003cmeta name=\"keywords\" content=\"a, b, c\"\u003e\n```\n\n###### `meta[name=theme-color]`\n\nAffected by: [`color`][o-color].\n\nIf `color` is `'#bada55'`:\n\n```html\n\u003cmeta name=\"theme-color\" content=\"#bada55\"\u003e\n```\n\n###### `meta[name=twitter:card]`\n\nAffected by: [`og`][o-og], [`twitter`][o-twitter], [`image`][o-image].\n\nIf `twitter` is not `true`, `meta[name=twitter:card]` is not added.\nIf `twitter` is `true`, `og` is true, and there is no valid image, no\n`meta[name=twitter:card]` is added either, because Twitter assumes a summary in\nthis case.\n\nIf `twitter` is `true` and there is a valid image:\n\n```html\n\u003cmeta name=\"twitter:card\" content=\"summary_large_image\"\u003e\n```\n\nIf `twitter` is `true` and there is no valid image:\n\n```html\n\u003cmeta name=\"twitter:card\" content=\"summary\"\u003e\n```\n\n###### `meta[name=twitter:creator]`\n\nAffected by: [`twitter`][o-twitter], [`authorTwitter`][o-author-twitter].\n\nIf `twitter` is not `true`, `meta[name=twitter:creator]` is not added.\n\nIf `twitter` is `true` and `authorTwitter` is `'@example'`:\n\n```html\n\u003cmeta name=\"twitter:creator\" content=\"@example\"\u003e\n```\n\n###### `meta[name=twitter:data1]`\n\n###### `meta[name=twitter:label1]`\n\nAffected by: [`twitter`][o-twitter], [`section`][o-section],\n[`readingTime`][o-reading-time].\n\n\u003e 👉 **Note**: this data is used by Slack, not by Twitter.\n\nIf `twitter` is not `true`, `meta[name=twitter:label1]` and\n`meta[name=twitter:data1]` are not added.\n\nIf `twitter` is `true` and `section` is `'Food'`:\n\n```html\n\u003cmeta name=\"twitter:label1\" content=\"Posted in\"\u003e\n\u003cmeta name=\"twitter:data1\" content=\"Food\"\u003e\n```\n\nIf `twitter` is `true`, `section` is not defined, and `readingTime` is `3.083`:\n\n```html\n\u003cmeta name=\"twitter:label1\" content=\"Reading time\"\u003e\n\u003cmeta name=\"twitter:data1\" content=\"4 minutes\"\u003e\n```\n\n###### `meta[name=twitter:data2]`\n\n###### `meta[name=twitter:label2]`\n\nAffected by: [`twitter`][o-twitter], [`section`][o-section],\n[`readingTime`][o-reading-time].\n\n\u003e 👉 **Note**: this data is used by Slack, not by Twitter.\n\nIf `twitter` is not `true`, `section` is not defined, or `readingTime` is not\ndefined, `meta[name=twitter:label2]` and `meta[name=twitter:data2]` are not\nadded.\n\nIf `twitter` is `true`, `section` is defined, and `readingTime` is `0.8`:\n\n```html\n\u003cmeta name=\"twitter:label2\" content=\"Reading time\"\u003e\n\u003cmeta name=\"twitter:data2\" content=\"1 minute\"\u003e\n```\n\nIf `twitter` is `true`, `section` is defined, and `readingTime` is `[8, 12]`:\n\n```html\n\u003cmeta name=\"twitter:label2\" content=\"Reading time\"\u003e\n\u003cmeta name=\"twitter:data2\" content=\"8-12 minutes\"\u003e\n```\n\n###### `meta[name=twitter:image]`\n\nAffected by: [`twitter`][o-twitter], [`image`][o-image].\n\nIf `twitter` is not `true`, `meta[name=twitter:image]` and\n`meta[name=twitter:image:alt]` are not added.\n\n\u003e 👉 **Note**: only one image is added.\n\nIf `twitter` is `true` and `image` is `'https://example.com/image.png'`:\n\n```html\n\u003cmeta name=\"twitter:image\" content=\"https://example.com/image.png\"\u003e\n```\n\nIf `twitter` is `true` and `image` is `['https://example.com/a.png',\n'https://example.com/b.png']`:\n\n```html\n\u003cmeta name=\"twitter:image\" content=\"https://example.com/a.png\"\u003e\n```\n\nIf `twitter` is `true` and `image` is `{url: 'https://example.com/a.png', alt:\n'A', width: '670', height: '1012'}`:\n\n```html\n\u003cmeta name=\"twitter:image\" content=\"https://example.com/a.png\"\u003e\n\u003cmeta name=\"twitter:image:alt\" content=\"A\"\u003e\n```\n\n###### `meta[name=twitter:site]`\n\nAffected by: [`twitter`][o-twitter], [`siteTwitter`][o-site-twitter].\n\nIf `twitter` is not `true`, `meta[name=twitter:site]` is not added.\n\nIf `twitter` is `true` and `siteTwitter` is `'@example'`:\n\n```html\n\u003cmeta name=\"twitter:site\" content=\"@example\"\u003e\n```\n\n###### `meta[property=article:author]`\n\nAffected by: [`og`][o-og], [`type`][o-type],\n[`authorFacebook`][o-author-facebook].\n\nIf `og` is not `true` or `type` is not `'article'`,\n`meta[property=article:author]` is not added.\n\nIf `og` is `true`, `type` is `'article'`, and `authorFacebook` is\n`'jane'`:\n\n```html\n\u003cmeta property=\"article:author\" content=\"https://www.facebook.com/jane\"\u003e\n```\n\n###### `meta[property=article:modified_time]`\n\nAffected by: [`og`][o-og], [`type`][o-type], [`modified`][o-modified].\n\nIf `og` is not `true` or `type` is not `'article'`,\n`meta[property=article:modified_time]` is not added.\n\nIf `og` is `true`, `type` is `'article'`, and `modified` is\n`'2017-04-26T22:37:10-05:00'`:\n\n```html\n\u003cmeta property=\"article:modified_time\" content=\"2017-04-27T03:37:10.000Z\"\u003e\n```\n\n###### `meta[property=article:published_time]`\n\nAffected by: [`og`][o-og], [`type`][o-type], [`published`][o-published].\n\nIf `og` is not `true` or `type` is not `'article'`,\n`meta[property=article:published_time]` is not added.\n\nIf `og` is `true`, `type` is `'article'`, and `published` is\n`'2014-06-30T15:01:35-05:00'`:\n\n```html\n\u003cmeta property=\"article:published_time\" content=\"2014-06-30T20:01:35.000Z\"\u003e\n```\n\n###### `meta[property=article:section]`\n\nAffected by: [`og`][o-og], [`type`][o-type], [`section`][o-section].\n\nIf `og` is not `true` or `type` is not `'article'`,\n`meta[property=article:section]` is not added.\n\nIf `og` is `true`, `type` is `'article'`, and `section` is `'Politics'`:\n\n```html\n\u003cmeta property=\"article:section\" content=\"Politics\"\u003e\n```\n\n###### `meta[property=article:tag]`\n\nAffected by: [`og`][o-og], [`type`][o-type], [`tag`][o-tags].\n\nIf `og` is not `true` or `type` is not `'article'`, `meta[property=article:tag]`\nare not added.\n\n\u003e 👉 **Note**: up to 6 tags are added.\n\nIf `og` is `true`, `type` is `'article'`, and `tags` is `['US Politics',\n'Impeachment', 'NATO', 'London', 'Food', 'Poverty', 'Climate Change']`:\n\n```html\n\u003cmeta property=\"article:tag\" content=\"US Politics\"\u003e\n\u003cmeta property=\"article:tag\" content=\"Impeachment\"\u003e\n\u003cmeta property=\"article:tag\" content=\"NATO\"\u003e\n\u003cmeta property=\"article:tag\" content=\"London\"\u003e\n\u003cmeta property=\"article:tag\" content=\"Food\"\u003e\n\u003cmeta property=\"article:tag\" content=\"Poverty\"\u003e\n```\n\n###### `meta[property=og:description]`\n\nAffected by: [`og`][o-og], [`description`][o-description].\n\nIf `og` is not `true`, `meta[property=og:description]` is not added.\n\nIf `og` is `true` and `description` is `'Lorem ipsum'`:\n\n```html\n\u003cmeta property=\"og:description\" content=\"Lorem ipsum\"\u003e\n```\n\n###### `meta[property=og:image]`\n\nAffected by: [`og`][o-og], [`image`][o-image].\n\nIf `og` is not `true`, `meta[property=og:image]`, `meta[property=og:image:alt]`,\n`meta[property=og:image:width]`, and `meta[property=og:image:height]` are not\nadded.\n\n\u003e 👉 **Note**: up to 6 images are added.\n\nIf `og` is `true` and `image` is `'https://example.com/image.png'`:\n\n```html\n\u003cmeta property=\"og:image\" content=\"https://example.com/image.png\"\u003e\n```\n\nIf `og` is `true` and `image` is `['https://example.com/a.png',\n'https://example.com/b.png']`:\n\n```html\n\u003cmeta property=\"og:image\" content=\"https://example.com/a.png\"\u003e\n\u003cmeta property=\"og:image\" content=\"https://example.com/b.png\"\u003e\n```\n\nIf `og` is `true` and `image` is `{url: 'https://example.com/a.png', alt: 'A',\nwidth: '670', height: '1012'}`:\n\n```html\n\u003cmeta property=\"og:image\" content=\"https://example.com/a.png\"\u003e\n\u003cmeta property=\"og:image:alt\" content=\"A\"\u003e\n\u003cmeta property=\"og:image:width\" content=\"670\"\u003e\n\u003cmeta property=\"og:image:height\" content=\"1012\"\u003e\n```\n\n###### `meta[property=og:site_name]`\n\nAffected by: [`og`][o-og], [`name`][o-name].\n\nIf `og` is not `true`, `meta[property=og:site_name]` is not added.\n\nIf `og` is `true` and `name` is `'Example'`:\n\n```html\n\u003cmeta property=\"og:site_name\" content=\"Example\"\u003e\n```\n\n###### `meta[property=og:title]`\n\nAffected by: [`og`][o-og], [`ogNameInTitle`][o-og-name-in-title],\n[`title`][o-title], [`name`][o-name], [`separator`][o-separator].\n\nIf `og` is not `true`, `meta[property=og:title]` is not added.\n\nIf `og` is `true` and `title` is `'About'`:\n\n```html\n\u003cmeta property=\"og:title\" content=\"About\"\u003e\n```\n\nIf `og` is `true`, `ogNameInTitle` is `true`, `title` is `'About'`, and `name`\nis `'Site'`:\n\n```html\n\u003cmeta property=\"og:title\" content=\"About - Site\"\u003e\n```\n\nIf `og` is `true`, `ogNameInTitle` is `true`, `title` is `'About'`, `name` is\n`'Site'`, and `separator` is `' | '`:\n\n```html\n\u003cmeta property=\"og:title\" content=\"About | Site\"\u003e\n```\n\n###### `meta[property=og:type]`\n\nAffected by: [`og`][o-og], [`type`][o-type].\n\nIf `og` is not `true`, `meta[property=og:type]` is not added.\n\nIf `og` is `true` and `type` is `'website'`:\n\n```html\n\u003cmeta property=\"og:type\" content=\"website\"\u003e\n```\n\nIf `og` is `true` and `type` is `'article'`:\n\n```html\n\u003cmeta property=\"og:type\" content=\"article\"\u003e\n```\n\n###### `meta[property=og:url]`\n\nAffected by: [`og`][o-og], [`origin`][o-origin], [`pathname`][o-path-name].\n\nIf `og` is not `true`, `meta[property=og:url]` is not added.\n\nIf `og` is `true`, `origin` is `'https://example.com'`, and `path` is\n`'/path/'`:\n\n```html\n\u003cmeta property=\"og:url\" content=\"https://example.com/path/\"\u003e\n```\n\nIf `origin` is `'https://example.com'` and `path` is not set:\n\n```html\n\u003cmeta property=\"og:url\" content=\"https://example.com/\"\u003e\n```\n\n###### `title`\n\nAffected by: [`title`][o-title], [`name`][o-name], [`separator`][o-separator].\n\nIf `title` is `'About'`:\n\n```html\n\u003ctitle\u003eAbout\u003c/title\u003e\n```\n\nIf `name` is `'Example'`:\n\n```html\n\u003ctitle\u003eExample\u003c/title\u003e\n```\n\nIf `title` is `'About'` and `name` is `'Example'`:\n\n```html\n\u003ctitle\u003eAbout - Example\u003c/title\u003e\n```\n\nIf `title` is `'About'`, `name` is `'Example'`, and separator to `' | '`:\n\n```html\n\u003ctitle\u003eAbout | Example\u003c/title\u003e\n```\n\n## Examples\n\n### Example: frontmatter in markdown\n\nThis example shows how it’s possible to combine the different data sources to\npass site wide info as options and define more specific data from within\nmarkdown files with frontmatter.\n\nSay we have the following file `example.md`:\n\n```markdown\n---\ntitle: Neptune\nauthor: U. Le Verrier\nauthorTwitter: '@leverrier123'\ndescription: Neptune is blue.\ntags:\n- neptune\n- blue\n---\n\n# Neptune\n\nTo do: write some stuff about why neptune is cool.\n```\n\n…and a module `example.js`:\n\n```js\nimport remarkFrontmatter from 'remark-frontmatter'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport rehypeDocument from 'rehype-document'\nimport rehypeMeta from 'rehype-meta'\nimport rehypeStringify from 'rehype-stringify'\nimport {read} from 'to-vfile'\nimport {unified} from 'unified'\nimport {matter} from 'vfile-matter'\n\nconst file = await read('example.md')\n\n// Define where the generated file will be available.\nfile.data.meta = {\n  origin: 'https://planets.com',\n  pathname: '/neptune/'\n}\n\nawait unified()\n  .use(remarkParse)\n  .use(remarkFrontmatter)\n  .use(function () {\n    return function (_, file) {\n      matter(file)\n    }\n  })\n  .use(remarkRehype)\n  // `rehype-document` manages non-metadata things in `\u003chead\u003e`.\n  .use(rehypeDocument, {\n    css: 'https://planets.com/index.css',\n    js: 'https://planets.com/index.js'\n  })\n  // Site wide metadata:\n  .use(rehypeMeta, {\n    copyright: true,\n    name: 'Planets',\n    og: true,\n    siteAuthor: 'J. Galle',\n    siteTags: ['planet', 'solar', 'galaxy'],\n    siteTwitter: '@the_planets',\n    twitter: true,\n    type: 'article'\n  })\n  .use(rehypeStringify)\n  .process(file)\n\nconsole.log(String(file))\n```\n\n…now running `node example.js` yields:\n\n```html\n\u003c!doctype html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\n\u003cmeta charset=\"utf-8\"\u003e\n\u003ctitle\u003eNeptune - Planets\u003c/title\u003e\n\u003cmeta content=\"width=device-width, initial-scale=1\" name=\"viewport\"\u003e\n\u003clink href=\"https://planets.com/index.css\" rel=\"stylesheet\"\u003e\n\u003clink rel=\"canonical\" href=\"https://planets.com/neptune/\"\u003e\n\u003cmeta name=\"description\" content=\"Neptune is blue.\"\u003e\n\u003cmeta name=\"keywords\" content=\"neptune, blue, planet, solar, galaxy\"\u003e\n\u003cmeta name=\"author\" content=\"U. Le Verrier\"\u003e\n\u003cmeta name=\"copyright\" content=\"© 2023 U. Le Verrier\"\u003e\n\u003cmeta property=\"og:type\" content=\"article\"\u003e\n\u003cmeta property=\"og:site_name\" content=\"Planets\"\u003e\n\u003cmeta property=\"og:url\" content=\"https://planets.com/neptune/\"\u003e\n\u003cmeta property=\"og:title\" content=\"Neptune\"\u003e\n\u003cmeta property=\"og:description\" content=\"Neptune is blue.\"\u003e\n\u003cmeta property=\"article:tag\" content=\"neptune\"\u003e\n\u003cmeta property=\"article:tag\" content=\"blue\"\u003e\n\u003cmeta name=\"twitter:site\" content=\"@the_planets\"\u003e\n\u003cmeta name=\"twitter:creator\" content=\"@leverrier123\"\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003ch1\u003eNeptune\u003c/h1\u003e\n\u003cp\u003eTo do: write some stuff about why neptune is cool.\u003c/p\u003e\n\u003cscript src=\"https://planets.com/index.js\"\u003e\u003c/script\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n### Example: inferring metadata\n\nSome metadata can be automatically gathered, either by extracting it from the\ndocument, or by accessing the file system or Git.\nThis is done by other plugins (see [config][]) which “infer” that metadata and\nstore their results on `file.data.meta`, which this plugin then looks at.\n\nTaking this readme as an example and running the following code within this\nrepo:\n\n```js\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport rehypeDocument from 'rehype-document'\nimport rehypeInferTitleMeta from 'rehype-infer-title-meta'\nimport rehypeInferDescriptionMeta from 'rehype-infer-description-meta'\nimport rehypeInferReadingTimeMeta from 'rehype-infer-reading-time-meta'\nimport rehypeMeta from 'rehype-meta'\nimport rehypeStringify from 'rehype-stringify'\nimport {read} from 'to-vfile'\nimport {unified} from 'unified'\nimport unifiedInferGitMeta from 'unified-infer-git-meta'\n\nconst file = await unified()\n  .use(remarkParse)\n  .use(unifiedInferGitMeta) // Find published, modified, and authors in Git.\n  .use(remarkRehype)\n  .use(rehypeDocument)\n  .use(rehypeInferTitleMeta) // Find the main title.\n  .use(rehypeInferDescriptionMeta, {truncateSize: 64}) // Find the description.\n  .use(rehypeInferReadingTimeMeta) // Estimate reading time.\n  .use(rehypeMeta, {og: true, twitter: true, copyright: true})\n  .use(rehypeStringify)\n  .process(await read('readme.md'))\n\nconsole.log(String(file))\n```\n\nYields:\n\n```html\n\u003c!doctype html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\n\u003cmeta charset=\"utf-8\"\u003e\n\u003ctitle\u003erehype-meta\u003c/title\u003e\n\u003cmeta content=\"width=device-width, initial-scale=1\" name=\"viewport\"\u003e\n\u003cmeta name=\"description\" content=\"rehype plugin to add metadata to the \u003chead…\"\u003e\n\u003cmeta name=\"author\" content=\"Titus Wormer\"\u003e\n\u003cmeta name=\"copyright\" content=\"© 2019 Titus Wormer\"\u003e\n\u003cmeta property=\"og:type\" content=\"website\"\u003e\n\u003cmeta property=\"og:title\" content=\"rehype-meta\"\u003e\n\u003cmeta property=\"og:description\" content=\"rehype plugin to add metadata to the \u003chead…\"\u003e\n\u003cmeta name=\"twitter:label1\" content=\"Reading time\"\u003e\n\u003cmeta name=\"twitter:data1\" content=\"16-25 minutes\"\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003ch1\u003erehype-meta\u003c/h1\u003e\n…\n```\n\n## Types\n\nThis package is fully typed with [TypeScript][].\nIt exports the additional types [`Image`][api-image] and\n[`Options`][api-options].\n\nIt also registers expected fields on `file.data.meta` and `file.data.matter`\nwith `vfile`.\nIf you’re working with the file, make sure to import this plugin somewhere in\nyour types, as that registers the new fields on the file.\n\n```js\n/**\n * @import {} from 'rehype-meta'\n */\n\nimport {VFile} from 'vfile'\n\nconst file = new VFile()\n\nconsole.log(file.data.meta.title) //=\u003e TS now knows that this is a `string?`.\n```\n\n## Compatibility\n\nProjects maintained by the unified collective are compatible with maintained\nversions of Node.js.\n\nWhen we cut a new major release, we drop support for unmaintained versions of\nNode.\nThis means we try to keep the current release line, `rehype-meta@^4`, compatible\nwith Node.js 16.\n\nThis plugin works with `rehype-parse` version 3+, `rehype-stringify` version 3+,\n`rehype` version 4+, and `unified` version 6+.\n\n## Security\n\nUse of `rehype-meta` is relatively safe, however, it is possible for an attacker\nto define metadata from within a because of the [`matter`][vfile-matter]\nintegration.\n\n## Related\n\n* [`unified-infer-git-meta`](https://github.com/unifiedjs/unified-infer-git-meta)\n  — infer file metadata from Git\n* [`rehype-infer-description-meta`](https://github.com/rehypejs/rehype-infer-description-meta)\n  — infer file metadata from the description of a document\n* [`rehype-infer-title-meta`](https://github.com/rehypejs/rehype-infer-title-meta)\n  — infer file metadata from the title of a document\n* [`rehype-infer-reading-time-meta`](https://github.com/rehypejs/rehype-infer-reading-time-meta)\n  — infer file metadata about how long the document takes to read\n* [`rehype-document`][rehype-document]\n  — wrap a fragment in a document\n* [`rehype-format`](https://github.com/rehypejs/rehype-format)\n  — format HTML\n* [`rehype-minify`](https://github.com/rehypejs/rehype-minify)\n  — minify HTML\n\n## Contribute\n\nSee [`contributing.md`][contributing] in [`rehypejs/.github`][health] for ways\nto get started.\nSee [`support.md`][support] for ways to get help.\n\nThis project has a [code of conduct][coc].\nBy interacting with this repository, organization, or community you agree to\nabide by its terms.\n\n## License\n\n[MIT][license] © [Titus Wormer][author]\n\n\u003c!-- Definitions --\u003e\n\n[build-badge]: https://github.com/rehypejs/rehype-meta/workflows/main/badge.svg\n\n[build]: https://github.com/rehypejs/rehype-meta/actions\n\n[coverage-badge]: https://img.shields.io/codecov/c/github/rehypejs/rehype-meta.svg\n\n[coverage]: https://codecov.io/github/rehypejs/rehype-meta\n\n[downloads-badge]: https://img.shields.io/npm/dm/rehype-meta.svg\n\n[downloads]: https://www.npmjs.com/package/rehype-meta\n\n[size-badge]: https://img.shields.io/bundlejs/size/rehype-meta\n\n[size]: https://bundlejs.com/?q=rehype-meta\n\n[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg\n\n[backers-badge]: https://opencollective.com/unified/backers/badge.svg\n\n[collective]: https://opencollective.com/unified\n\n[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg\n\n[chat]: https://github.com/rehypejs/rehype/discussions\n\n[npm]: https://docs.npmjs.com/cli/install\n\n[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c\n\n[esmsh]: https://esm.sh\n\n[health]: https://github.com/rehypejs/.github\n\n[contributing]: https://github.com/rehypejs/.github/blob/main/contributing.md\n\n[support]: https://github.com/rehypejs/.github/blob/main/support.md\n\n[coc]: https://github.com/rehypejs/.github/blob/main/code-of-conduct.md\n\n[license]: license\n\n[author]: https://wooorm.com\n\n[rehype]: https://github.com/rehypejs/rehype\n\n[rehype-document]: https://github.com/rehypejs/rehype-document\n\n[typescript]: https://www.typescriptlang.org\n\n[unified]: https://github.com/unifiedjs/unified\n\n[unified-transformer]: https://github.com/unifiedjs/unified#transformer\n\n[vfile-matter]: https://github.com/vfile/vfile-matter\n\n[timestamp]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date#Timestamp_string\n\n[config]: #config\n\n[api-image]: #image\n\n[api-options]: #options\n\n[api-rehype-meta]: #unifieduserehypemeta-options\n\n[m-article-author]: #metapropertyarticleauthor\n\n[m-article-modified-time]: #metapropertyarticlemodified_time\n\n[m-article-published-time]: #metapropertyarticlepublished_time\n\n[m-article-section]: #metapropertyarticlesection\n\n[m-article-tag]: #metapropertyarticletag\n\n[m-author]: #metanameauthor\n\n[m-canonical]: #linkrelcanonical\n\n[m-copyright]: #metanamecopyright\n\n[m-description]: #metanamedescription\n\n[m-keywords]: #metanamekeywords\n\n[m-og-description]: #metapropertyogdescription\n\n[m-og-image]: #metapropertyogimage\n\n[m-og-site-name]: #metapropertyogsite_name\n\n[m-og-title]: #metapropertyogtitle\n\n[m-og-type]: #metapropertyogtype\n\n[m-og-url]: #metapropertyogurl\n\n[m-title]: #title-1\n\n[m-theme-color]: #metanametheme-color\n\n[m-twitter-card]: #metanametwittercard\n\n[m-twitter-creator]: #metanametwittercreator\n\n[m-twitter-data1]: #metanametwitterdata1\n\n[m-twitter-data2]: #metanametwitterdata2\n\n[m-twitter-image]: #metanametwitterimage\n\n[m-twitter-label1]: #metanametwitterlabel1\n\n[m-twitter-label2]: #metanametwitterlabel2\n\n[m-twitter-site]: #metanametwittersite\n\n[o-author]: #author\n\n[o-author-facebook]: #authorfacebook\n\n[o-author-twitter]: #authortwitter\n\n[o-color]: #color\n\n[o-copyright]: #copyright\n\n[o-description]: #description\n\n[o-image]: #image-1\n\n[o-modified]: #modified\n\n[o-name]: #name\n\n[o-og]: #og\n\n[o-og-name-in-title]: #ognameintitle\n\n[o-origin]: #origin\n\n[o-path-name]: #pathname\n\n[o-published]: #published\n\n[o-reading-time]: #readingtime\n\n[o-section]: #section\n\n[o-separator]: #separator\n\n[o-site-author]: #siteauthor\n\n[o-site-tags]: #sitetags\n\n[o-site-twitter]: #sitetwitter\n\n[o-tags]: #tags\n\n[o-title]: #title\n\n[o-twitter]: #twitter\n\n[o-type]: #type\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frehypejs%2Frehype-meta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frehypejs%2Frehype-meta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frehypejs%2Frehype-meta/lists"}