Template Rendering

Design Open Graph cards in HTML template tags

You can now use the HTML <template> element to design Open Graph cards without changing your visible page content.

How it works

Add a <template id="ogplus"> element to your page’s <head>. When OpenGraph+ renders your page, it replaces the body content with your template:

<head>
  <template id="ogplus">
    <div class="og-card">
      <h1>My Blog Post</h1>
      <p>A custom card design for social sharing</p>
    </div>
  </template>
</head>
<body>
  <h1>My Blog Post</h1>
  <p>Regular page content here...</p>
</body>

The template is invisible to visitors since browsers don’t render <template> elements. OpenGraph+ sees it and uses it for the screenshot.

Provider-specific templates

Different social networks have different card dimensions. You can create templates for specific providers:

<head>
  <template id="ogplus">
    <div>Default card</div>
  </template>

  <template id="ogplus-twitter">
    <div>Twitter-specific card (wider aspect ratio)</div>
  </template>

  <template id="ogplus-discord">
    <div>Discord-specific card</div>
  </template>
</head>

When Twitter’s crawler hits your page, it gets ogplus-twitter. Discord gets ogplus-discord. Everyone else gets the default ogplus template.

Selecting templates with og:plus:selector

If you’d rather name your templates differently, use og:plus:selector to point at them:

<head>
  <meta property="og:plus:selector" content="template#social-card">
  <template id="social-card">
    <div>Your card design</div>
  </template>
</head>

The selector approach also lets you select non-template elements if you want to screenshot a specific part of your page instead.

When to use templates vs selectors

Use <template id="ogplus"> when you want a completely custom card design that’s separate from your page content.

Use og:plus:selector when you want to screenshot an existing element on your page, like a hero section or article header.

Why templates?

I use OpenGraph+ to render Open Graph images for OpenGraph+. This week as I was putting together landing pages for specific customers, I needed a way to pull in their… umm… “crazy” HTML page is a nice way of putting it, into OpenGraph+, manipulate it, and emit a reasonable looking OpenGraph image.

I tried everything from injecting CSS to JavaScript, and getting it working was super clunky. Finally I landed on using the HTML <template> element to pull HTML content in from the page into some more sane DOM, then let OpenGraph+ render it.

The technique proved to be so effective that I decided to roll it into the official API as yet another way to render OpenGraph images with web standards for websites.

Automatic Open Graph for every page

Set up automatic Open Graph tags in under 10 minutes.