Open Graph and Twitter cards help your web pages look nice when shared on social media. They show images, titles, and descriptions automatically.
Open Graph and Twitter cards in NextJS
import Head from 'next/head'; export default function Page() { return ( <> <Head> {/* Open Graph tags */} <meta property="og:title" content="Page Title" /> <meta property="og:description" content="Page description here." /> <meta property="og:image" content="https://example.com/image.jpg" /> <meta property="og:url" content="https://example.com/page" /> {/* Twitter Card tags */} <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="Page Title" /> <meta name="twitter:description" content="Page description here." /> <meta name="twitter:image" content="https://example.com/image.jpg" /> </Head> <main> {/* Page content here */} </main> </> ); }
Use the Head component from Next.js to add meta tags inside the HTML <head> section.
Open Graph uses property attributes, Twitter cards use name attributes in meta tags.
<Head> <meta property="og:title" content="My Blog Post" /> <meta property="og:description" content="A short summary of my post." /> <meta property="og:image" content="https://example.com/blog-image.jpg" /> <meta property="og:url" content="https://example.com/blog-post" /> </Head>
<Head> <meta name="twitter:card" content="summary" /> <meta name="twitter:title" content="My Blog Post" /> <meta name="twitter:description" content="A short summary of my post." /> <meta name="twitter:image" content="https://example.com/blog-image.jpg" /> </Head>
<Head>
{/* No image provided */}
<meta property="og:title" content="Page Without Image" />
<meta property="og:description" content="This page has no image." />
<meta property="og:url" content="https://example.com/no-image" />
</Head><Head> <meta name="twitter:card" content="summary" /> <meta name="twitter:title" content="Single Image Card" /> <meta name="twitter:image" content="https://example.com/single-image.jpg" /> </Head>
This Next.js page sets Open Graph and Twitter card meta tags inside the Head component. When shared on social media, the link will show the title, description, and image defined here.
import Head from 'next/head'; export default function SocialPreviewPage() { return ( <> <Head> {/* Open Graph tags */} <meta property="og:title" content="Welcome to My Site" /> <meta property="og:description" content="This is a simple page with Open Graph and Twitter cards." /> <meta property="og:image" content="https://example.com/welcome-image.jpg" /> <meta property="og:url" content="https://example.com/welcome" /> {/* Twitter Card tags */} <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="Welcome to My Site" /> <meta name="twitter:description" content="This is a simple page with Open Graph and Twitter cards." /> <meta name="twitter:image" content="https://example.com/welcome-image.jpg" /> </Head> <main> <h1>Welcome to My Site</h1> <p>This page has meta tags for social media previews.</p> </main> </> ); }
Open Graph tags improve how your page looks on Facebook, LinkedIn, and other platforms.
Twitter cards require specific meta tags to show images and summaries on Twitter.
Always use absolute URLs (starting with https://) for images and links in meta tags.
Open Graph and Twitter cards make your shared links look better on social media.
Use Next.js Head component to add these meta tags inside your pages.
Include title, description, image, and URL for best results.
Practice
Solution
Step 1: Understand Open Graph and Twitter cards
These meta tags control how links look when shared on social media, like showing images and descriptions.Step 2: Identify their purpose in Next.js
Adding these tags inside theHeadcomponent improves link previews, not performance or fonts.Final Answer:
To improve how links appear when shared on social media platforms -> Option BQuick Check:
Open Graph = Better social media previews [OK]
- Thinking they speed up page loading
- Confusing with styling or fonts
- Assuming they enable server-side rendering
Head component?Solution
Step 1: Recall Open Graph meta tag syntax
Open Graph tags useproperty="og:..."attribute, notname.Step 2: Check Next.js
Meta tags go insideHeadusageHeadwith correct attributes;property="og:title"is correct for Open Graph title.Final Answer:
<Head><meta property="og:title" content="My Page Title" /></Head> -> Option DQuick Check:
Open Graph uses property="og:title" [OK]
- Using name="og:title" instead of property
- Confusing Twitter card tags with Open Graph
- Placing meta tags outside <Head>
import Head from 'next/head';
export default function Page() {
return (
<Head>
<meta name="twitter:title" content="Welcome to Next.js" />
</Head>
);
}Solution
Step 1: Check the meta tag syntax in the component
The component usesname="twitter:title"which is correct for Twitter cards.Step 2: Confirm rendering behavior
Next.jsHeadrenders meta tags as written, so the tag will appear exactly as coded.Final Answer:
<meta name="twitter:title" content="Welcome to Next.js" /> -> Option CQuick Check:
Twitter card title uses name="twitter:title" [OK]
- Using property instead of name for Twitter tags
- Confusing Open Graph and Twitter meta attributes
- Assuming Next.js modifies meta tags automatically
<Head> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:image" content="/images/card.png" /> </Head>What is the most likely reason the image does not appear on Twitter?
Solution
Step 1: Check the image URL format
Twitter requires absolute URLs (including https://domain) for images, not relative paths.Step 2: Verify meta tag attributes
Usingname="twitter:image"is correct; Twitter supports images in cards.Final Answer:
The image URL is relative and should be absolute with full domain -> Option AQuick Check:
Twitter image URLs must be absolute [OK]
- Using relative image URLs
- Changing name to property for Twitter tags
- Thinking Twitter cards don't support images
Head component?Solution
Step 1: Verify Open Graph meta tags
Open Graph tags useproperty="og:..."with absolute image URL, which is correct in options A, C, D.Step 2: Verify Twitter card meta tags
Twitter tags usename="twitter:..."and includetwitter:cardwith valuesummary_large_imagefor large image preview, correctly done only in A.Step 3: Check image URLs and completeness
uses absolute URLs for images and includes all required tags for both Open Graph and Twitter cards.Final Answer:
Option A correctly combines Open Graph and Twitter card meta tags with proper attributes and URLs -> Option AQuick Check:
Open Graph uses property, Twitter uses name, absolute URLs needed [OK]
- Using name instead of property for Open Graph
- Using relative URLs for images
- Omitting twitter:card meta tag
Ready to prove it?
Pass the test and this pattern moves unknown
