Content Meta Tags
When you register a content URL with Sesamy, our scraper visits the page and reads metadata from the HTML to understand what the content is, how much it costs, and how to display it. This guide explains what tags to add to your pages so the scraper picks up the right information.
Quick Start
If your site already has Open Graph tags (most CMS platforms add them automatically), the scraper will pick up your title, description, and image without any extra work. To sell content through Sesamy you just need to add the price and currency:
<meta property="sesamy:price" content="29" />
<meta property="sesamy:currency" content="SEK" />That's it for a basic setup. Read on for the full list of tags and more advanced options.
How the Scraper Reads Your Page
The scraper looks for content information in several places on your page. Most websites already have some of this metadata in place for search engines and social media sharing, so the scraper can often pick up the basics without you adding anything new.
Here are the sources the scraper reads, listed from highest to lowest priority. When the same piece of information (say, the description) is found in more than one place, the scraper uses the one with the highest priority and ignores the rest.
<sesamy-content-data>element -- A custom HTML element you can place in your page body. This always takes the highest priority.sesamy:meta tags -- Meta tags using the Sesamy namespace. These override everything below.og:Open Graph tags -- The tags you already use for Facebook, LinkedIn, and other social platforms.article:meta tags -- Tags commonly used by news sites and blogs for article metadata.- JSON-LD structured data -- Schema.org data embedded in
<script type="application/ld+json">blocks. - Standard HTML -- Your page's
<title>tag,<meta name="description">,<link rel="canonical">, and so on.
TIP
You have full control: if you want the scraper to see something different from what your Open Graph tags say, just add a sesamy: tag and it will take precedence. If you're happy with your existing tags, the scraper will use those automatically.
Where to Put Tags
You have two options for telling Sesamy about your content. You can use either one, or both.
Option 1: Meta Tags in <head>
Add <meta> tags to the <head> of your page using the sesamy: prefix:
<head>
<meta property="sesamy:price" content="29" />
<meta property="sesamy:currency" content="SEK" />
<meta property="sesamy:publisher-content-id" content="article-123" />
</head>These work just like Open Graph tags. Both property and name attributes are supported, so these two are equivalent:
<meta property="sesamy:price" content="29" />
<meta name="sesamy:price" content="29" />Option 2: The Content Data Element
Place a <sesamy-content-data> element in the <body> of your page. This is useful when you want to keep all Sesamy configuration in one place, or when you have multiple sellable items on the same page:
<body>
<sesamy-content-data
id="article-123"
price="29"
currency="SEK"
description="An in-depth guide to..."
image="https://example.com/image.jpg"
item-src="https://example.com/articles/123"
></sesamy-content-data>
</body>Available Tags
Pricing
These are the only tags you must provide. Everything else has sensible fallbacks from your existing page metadata.
| Tag | Description | Example |
|---|---|---|
sesamy:price | The price of the content | 29 |
sesamy:currency | The currency code (3 letters, e.g. SEK, EUR, USD) | SEK |
sesamy:is-sellable | Whether this item is listed for sale. Set to true or 1 to enable. If omitted, the scraper assumes true when a price is set | true |
Content data element equivalents: price, currency attributes.
Author and Tags
Author information and tags help Sesamy understand and categorize your content. These are important for discoverability and for displaying content correctly to readers.
| Tag | Fallback if not set | Description | Example |
|---|---|---|---|
sesamy:author | article:author, then page byline | The author of the content. Displayed alongside the title in listings | Jane Doe |
sesamy:tag | article:tag | A content tag or keyword. Add as many as you need by repeating the tag | Technology |
sesamy:section | article:section | A category or section name. Repeat for multiple sections | Business |
You can add multiple tags and sections -- just repeat the meta tag for each value:
<meta property="sesamy:author" content="Jane Doe" />
<meta property="sesamy:tag" content="Technology" />
<meta property="sesamy:tag" content="Innovation" />
<meta property="sesamy:tag" content="AI" />
<meta property="sesamy:section" content="Business" />
<meta property="sesamy:section" content="Opinion" />If you don't use sesamy: tags for these, the scraper falls back to article: tags -- which many CMS platforms already generate:
<meta property="article:author" content="Jane Doe" />
<meta property="article:tag" content="Technology" />
<meta property="article:tag" content="Innovation" />
<meta property="article:section" content="Business" />The scraper also reads author information from JSON-LD structured data as a last resort:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"author": {
"@type": "Person",
"name": "Jane Doe"
}
}
</script>Content Information
These tags let you control how your content appears in Sesamy. If you don't set them, the scraper falls back to your Open Graph tags, then to standard HTML -- so in many cases you won't need to set these at all.
| Tag | Fallback if not set | Description | Example |
|---|---|---|---|
sesamy:title | og:title, then <title>, then first <h1> | The title of your content | My Premium Article |
sesamy:description | og:description, then <meta name="description"> | A short summary | An in-depth look at... |
sesamy:image | og:image | A cover or featured image URL | https://example.com/hero.jpg |
Content data element equivalents: description, image attributes.
If you don't set Sesamy-specific tags, the scraper reads these from your Open Graph tags:
<meta property="og:title" content="The Future of Digital Publishing" />
<meta property="og:description" content="How publishers are adapting to new models" />
<meta property="og:image" content="https://example.com/hero.jpg" />It also picks up title and image from JSON-LD structured data as a further fallback:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "The Future of Digital Publishing",
"image": "https://example.com/hero.jpg"
}
</script>Dates and Other Metadata
| Tag | Fallback if not set | Description | Example |
|---|---|---|---|
sesamy:published_time | article:published_time | When the content was published | 2025-03-15T10:00:00Z |
sesamy:brandId | -- | A brand identifier | my-brand |
If you don't set sesamy:published_time, the scraper falls back to the article: tag that most CMS platforms output:
<meta property="article:published_time" content="2025-03-15T10:00:00Z" />It also reads the published date from JSON-LD:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"datePublished": "2025-03-15T10:00:00Z"
}
</script>Identity
| Tag | Description | Example |
|---|---|---|
sesamy:publisher-content-id | Your internal ID for this content | article-456 |
sesamy:client-id | Your Sesamy client identifier | my-client |
sesamy:presentation-url | A custom URL for how the content is presented | https://example.com/read/456 |
Content data element equivalents: the id attribute maps to publisher-content-id.
Using Open Graph Tags
If your site already has Open Graph (og:) tags -- and most do -- the scraper reads them automatically. You don't need to duplicate this information in Sesamy tags. The scraper picks up the following OG tags:
<head>
<meta property="og:title" content="The Future of Digital Publishing" />
<meta property="og:description" content="How publishers are adapting to new models" />
<meta property="og:image" content="https://example.com/hero.jpg" />
<meta property="og:type" content="article" />
<meta property="og:currency" content="SEK" />
</head>These are used as fallbacks when no sesamy: tag is set for the same field.
You can also use the article: namespace tags that many CMS platforms generate for news articles:
<head>
<meta property="article:author" content="Anna Svensson" />
<meta property="article:published_time" content="2025-03-15T10:00:00Z" />
<meta property="article:tag" content="Technology" />
<meta property="article:tag" content="Innovation" />
<meta property="article:section" content="Business" />
</head>These are used as fallbacks when neither a sesamy: tag nor an og: tag provides the information.
Using JSON-LD Structured Data
If your site uses JSON-LD structured data (common with WordPress, news sites, and sites optimized for Google), the scraper reads that too. It looks for the content type from JSON-LD and uses it as a fallback when no og:type is set.
<head>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "The Future of Digital Publishing",
"author": {
"@type": "Person",
"name": "Anna Svensson"
},
"datePublished": "2025-03-15T10:00:00Z",
"image": "https://example.com/hero.jpg",
"publisher": {
"@type": "Organization",
"name": "Example News"
}
}
</script>
</head>JSON-LD is lower priority than sesamy: and og: tags, so it serves as a safety net -- if your page has structured data but you haven't added any other meta tags, the scraper can still extract the basics.
Priority Reference
A quick-reference table showing exactly which source wins for each field. The scraper checks from left to right and stops at the first source that has a value.
| Field | 1st (wins) | 2nd | 3rd | 4th |
|---|---|---|---|---|
| Price | <sesamy-content-data> | sesamy:price | -- | -- |
| Currency | <sesamy-content-data> | sesamy:currency | og:currency | <meta name="currency"> |
| Title | sesamy:title | og:title | <title> | First <h1> |
| Description | <sesamy-content-data> | sesamy:description | og:description | <meta name="description"> |
| Image | <sesamy-content-data> | sesamy:image | og:image | <meta name="image"> |
| Author | sesamy:author | article:author | JSON-LD author | Page byline |
| Tags | sesamy:tag (all) | article:tag (all) | -- | -- |
| Sections | sesamy:section (all) | article:section (all) | -- | -- |
| Published time | sesamy:published_time | article:published_time | -- | -- |
| Content type | JSON-LD @type | og:type | -- | -- |
| Publisher Content ID | <sesamy-content-data id> | sesamy:publisher-content-id | -- | -- |
| Canonical URL | <link rel="canonical"> | <link rel="self"> | Final URL | -- |
| Is sellable | sesamy:is-sellable | Derived (true if price > 0) | -- | -- |
Pricing Formats
Simple Price
A single number is the most common format:
<meta property="sesamy:price" content="29" />Price with ID and Tags
You can attach an identifier and tags to a price using semicolons. This is useful when you need to reference a specific price tier or categorize prices:
<!-- Format: id;amount;tag1;tag2 -->
<meta property="sesamy:price" content="premium;49;featured;exclusive" />Multiple Prices
To offer several price options, you can either use multiple meta tags:
<meta property="sesamy:price" content="29" />
<meta property="sesamy:price" content="premium;49;featured" />Or combine them with a pipe | separator in a single tag:
<meta property="sesamy:price" content="basic;29;standard|premium;49;featured" />Multiple Items on One Page
If a single page contains several sellable items, add one <sesamy-content-data> element for each and use the item-src attribute to link each element to its content URL:
<sesamy-content-data
id="article-1"
price="19"
currency="SEK"
item-src="https://example.com/articles/1"
></sesamy-content-data>
<sesamy-content-data
id="article-2"
price="29"
currency="SEK"
item-src="https://example.com/articles/2"
></sesamy-content-data>When the scraper visits the page for a specific content URL, it matches the item-src to find the right element. If no match is found, it uses the first element on the page.
Full Example
A complete example showing a well-tagged article page. This page uses a mix of Sesamy-specific tags for pricing and categorization, and standard Open Graph tags for content display -- the scraper reads all of them.
<html lang="sv">
<head>
<!-- Pricing (Sesamy-specific, required) -->
<meta property="sesamy:price" content="29" />
<meta property="sesamy:currency" content="SEK" />
<!-- Author and categorization (Sesamy-specific) -->
<meta property="sesamy:author" content="Anna Svensson" />
<meta property="sesamy:tag" content="Technology" />
<meta property="sesamy:tag" content="Innovation" />
<meta property="sesamy:tag" content="Digital Media" />
<meta property="sesamy:section" content="Business" />
<!-- Identity (Sesamy-specific) -->
<meta property="sesamy:publisher-content-id" content="article-456" />
<meta property="sesamy:client-id" content="my-client" />
<!-- Open Graph tags (the scraper uses these as fallback for title, description, image) -->
<meta property="og:title" content="The Future of Digital Publishing" />
<meta property="og:description" content="How publishers are adapting to new models" />
<meta property="og:image" content="https://example.com/hero.jpg" />
<meta property="og:type" content="article" />
<!-- Article tags (fallback for published time) -->
<meta property="article:published_time" content="2025-03-15T10:00:00Z" />
<!-- JSON-LD structured data (lowest priority fallback) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "The Future of Digital Publishing",
"author": { "@type": "Person", "name": "Anna Svensson" },
"datePublished": "2025-03-15T10:00:00Z",
"publisher": { "@type": "Organization", "name": "Example News" }
}
</script>
<!-- Standard HTML -->
<title>The Future of Digital Publishing | Example News</title>
<link rel="canonical" href="https://example.com/articles/future-of-publishing" />
</head>
<body>
<article>
<h1>The Future of Digital Publishing</h1>
<p>How publishers are adapting to new business models...</p>
</article>
</body>
</html>The scraper picks up:
- Title: "The Future of Digital Publishing" (from
og:title) - Description: "How publishers are adapting to new models" (from
og:description) - Author: Anna Svensson (from
sesamy:author) - Image:
https://example.com/hero.jpg(fromog:image) - Price: 29 SEK (from
sesamy:priceandsesamy:currency) - Tags: Technology, Innovation, Digital Media (from
sesamy:tag) - Section: Business (from
sesamy:section) - Content type: NewsArticle (from JSON-LD
@type) - Published time: 2025-03-15 (from
article:published_time) - Language: sv (from
<html lang>) - Canonical URL:
https://example.com/articles/future-of-publishing(from<link rel="canonical">)
JSON Endpoints
If your content URL returns JSON instead of HTML (for example, a WordPress REST API endpoint), the scraper detects this automatically and reads the fields directly from the response body:
{
"title": "My Premium Article",
"description": "An in-depth look at digital publishing",
"price": "29",
"prices": [{ "amount": 29 }],
"currency": "SEK",
"image": "https://example.com/cover.jpg",
"item_src": "https://example.com/api/articles/123",
"publisherContentId": "article-123"
}The field names in JSON map directly to their HTML equivalents -- item_src is the content URL, publisherContentId is the publisher's content ID, and so on.
Related Resources
- Content Metadata & Fallback Mechanism -- How the client-side SDK resolves metadata at runtime
- Static Website Integration -- Complete integration walkthrough for static sites
- CMS Integrations Overview -- Authentication, content protection, and web components