Skip to content

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:

html
<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.

  1. <sesamy-content-data> element -- A custom HTML element you can place in your page body. This always takes the highest priority.
  2. sesamy: meta tags -- Meta tags using the Sesamy namespace. These override everything below.
  3. og: Open Graph tags -- The tags you already use for Facebook, LinkedIn, and other social platforms.
  4. article: meta tags -- Tags commonly used by news sites and blogs for article metadata.
  5. JSON-LD structured data -- Schema.org data embedded in <script type="application/ld+json"> blocks.
  6. 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:

html
<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:

html
<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:

html
<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.

TagDescriptionExample
sesamy:priceThe price of the content29
sesamy:currencyThe currency code (3 letters, e.g. SEK, EUR, USD)SEK
sesamy:is-sellableWhether this item is listed for sale. Set to true or 1 to enable. If omitted, the scraper assumes true when a price is settrue

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.

TagFallback if not setDescriptionExample
sesamy:authorarticle:author, then page bylineThe author of the content. Displayed alongside the title in listingsJane Doe
sesamy:tagarticle:tagA content tag or keyword. Add as many as you need by repeating the tagTechnology
sesamy:sectionarticle:sectionA category or section name. Repeat for multiple sectionsBusiness

You can add multiple tags and sections -- just repeat the meta tag for each value:

html
<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:

html
<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:

html
<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.

TagFallback if not setDescriptionExample
sesamy:titleog:title, then <title>, then first <h1>The title of your contentMy Premium Article
sesamy:descriptionog:description, then <meta name="description">A short summaryAn in-depth look at...
sesamy:imageog:imageA cover or featured image URLhttps://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:

html
<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:

html
<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

TagFallback if not setDescriptionExample
sesamy:published_timearticle:published_timeWhen the content was published2025-03-15T10:00:00Z
sesamy:brandId--A brand identifiermy-brand

If you don't set sesamy:published_time, the scraper falls back to the article: tag that most CMS platforms output:

html
<meta property="article:published_time" content="2025-03-15T10:00:00Z" />

It also reads the published date from JSON-LD:

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "NewsArticle",
  "datePublished": "2025-03-15T10:00:00Z"
}
</script>

Identity

TagDescriptionExample
sesamy:publisher-content-idYour internal ID for this contentarticle-456
sesamy:client-idYour Sesamy client identifiermy-client
sesamy:presentation-urlA custom URL for how the content is presentedhttps://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:

html
<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:

html
<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.

html
<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.

Field1st (wins)2nd3rd4th
Price<sesamy-content-data>sesamy:price----
Currency<sesamy-content-data>sesamy:currencyog:currency<meta name="currency">
Titlesesamy:titleog:title<title>First <h1>
Description<sesamy-content-data>sesamy:descriptionog:description<meta name="description">
Image<sesamy-content-data>sesamy:imageog:image<meta name="image">
Authorsesamy:authorarticle:authorJSON-LD authorPage byline
Tagssesamy:tag (all)article:tag (all)----
Sectionssesamy:section (all)article:section (all)----
Published timesesamy:published_timearticle:published_time----
Content typeJSON-LD @typeog:type----
Publisher Content ID<sesamy-content-data id>sesamy:publisher-content-id----
Canonical URL<link rel="canonical"><link rel="self">Final URL--
Is sellablesesamy:is-sellableDerived (true if price > 0)----

Pricing Formats

Simple Price

A single number is the most common format:

html
<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:

html
<!-- 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:

html
<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:

html
<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:

html
<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
<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 (from og:image)
  • Price: 29 SEK (from sesamy:price and sesamy: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:

json
{
  "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.


Released under the MIT License.