Skip to content
Skillpedia
Social media48k · #4207

social-metadata-hardening

Helps your agent improve how links appear on social media. It ensures link previews show attractive images and descriptions. This makes more people click on shared content.

What it does

This tool helps ensure that links shared on social media and messaging apps appear with a nice, complete preview, instead of just a plain link. It fixes issues like missing images, incorrect text, or outdated previews.

When to use it

  • ✓When a shared link doesn't show an image or shows the wrong one.
  • ✓When you want the link preview to look exactly as you intended.
  • ✓Before launching a website to ensure all links look good everywhere.

Example of what to ask your AI

“Make my website links show nice previews on Facebook and WhatsApp.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/social-metadata-hardening/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/social-metadata-hardening/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The tool adds important information (like title, description, and image) to your website's code. It also makes sure the images used are the correct size and in a format that social media platforms understand.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add sickn33/agentic-awesome-skills --skill social-metadata-hardening

Or download just the file:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/social-metadata-hardening/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Social Metadata Hardening Skill

Fix social sharing so every important URL unfurls as a rich card across all platforms.


When to Use

  • Use when shared links show missing, stale, cropped, or incorrect previews on social and chat platforms.
  • Use when auditing Open Graph, Twitter/X card, image URL, alt text, or metadataBase coverage in a web app.
  • Use before launch when every public page needs predictable rich previews across LinkedIn, X, Facebook, WhatsApp, Slack, Discord, and Telegram.

Why Previews Break

Problem Root Cause
No preview at all Missing og:title, og:description, or og:image
Broken image Relative URL (must be absolute)
Wrong image size Image not 1200×630px (OG standard)
Plain text card Twitter card type missing or set to summary
Stale preview Platform caching old metadata
Metadata missing on crawl Tags added by client-side JS (crawlers don't run JS)

The Gold Standard Metadata Block

Every shareable page needs ALL of these in static HTML:

// Next.js App Router — lib/socialMetadata.js
export function buildSocialMetadata({
  title,
  description,
  path,          // '/blog/my-post'
  image,         // '/images/og/my-post.jpg' or full URL
  imageAlt,
  imageWidth = 1200,
  imageHeight = 630,
}) {
  const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'https://www.yourdomain.com';
  
  // Always produce an absolute URL
  const imageUrl = image?.startsWith('http') ? image : `${baseUrl}${image}`;
  const pageUrl  = `${baseUrl}${path}`;
  
  // Detect MIME type from extension
  const ext = imageUrl.split('.').pop().toLowerCase();
  const mimeMap = { jpg: 'image/jpeg', jpeg: 'image/jpeg', png: 'image/png', webp: 'image/webp' };
  const imageType = mimeMap[ext] || 'image/jpeg';

  return {
    title,
    description,
    alternates: { canonical: pageUrl },
    openGraph: {
      title,
      description,
      url: pageUrl,
      type: 'website',  // use 'article' for blog posts
      images: [{
        url: imageUrl,
        secureUrl: imageUrl,   // explicit HTTPS version
        width: imageWidth,
        height: imageHeight,
        alt: imageAlt || title,
        type: imageType,
      }],
    },
    twitter: {
      card: 'summary_large_image',  // NOT 'summary' — that shows a tiny image
      title,
      description,
      images: [imageUrl],
    },
  };
}

Applying the Helper

Static page

// app/about/page.js
import { buildSocialMetadata } from '@/lib/socialMetadata';

export const metadata = buildSocialMetadata({
  title: 'About Us | My Site',
  description: 'Learn about our team and mission.',
  path: '/about',
  image: '/images/og/about.jpg',
  imageAlt: 'The My Site team',
});

Dynamic page (blog post, tool page)

// app/blog/[slug]/page.js
import { buildSocialMetadata } from '@/lib/socialMetadata';

export async function generateMetadata({ params }) {
  const post = await getPost(params.slug);
  return buildSocialMetadata({
    title: `${post.title} | My Blog`,
    description: post.excerpt,
    path: `/blog/${params.slug}`,
    image: post.ogImage || '/images/og/default.jpg',
    imageAlt: post.title,
  });
}

Homepage (app/layout.js or app/page.js)

export const metadata = {
  metadataBase: new URL('https://www.yourdomain.com'), // REQUIRED for absolute URLs
  ...buildSocialMetadata({
    title: 'My Site — Tagline Here',
    description: 'Site-wide description.',
    path: '/',
    image: '/images/og/home.jpg',
  }),
};

⚠️ Set metadataBase when using relative metadata URLs. If your helper already outputs absolute canonical/OG URLs, previews can still work without it.


OG Image Checklist

Good OG images:

  • 1200 × 630px (2:1 ratio — works on all platforms)
  • Under 8MB (Facebook limit)
  • Served over HTTPS
  • File name has no spaces (use hyphens)
  • Format: JPEG or PNG (WebP works on most but not all crawlers)
  • Accessible via GET with no authentication
# Verify your OG image is reachable and correct size
curl -sI https://www.yourdomain.com/images/og/home.jpg | grep -i "content-type\|content-length\|status"

Platform-Specific Notes

Facebook / Meta

  • Caches aggressively — use the Sharing Debugger to force recrawl
  • Minimum image: 200×200px (but use 1200×630 for quality)
  • Needs: og:title, og:description, og:image, og:url

…

FAQ

Why is my link preview broken?

This can happen for several reasons: essential information (title, description, image) is missing, the image is a relative link (it needs to be a full URL), the image is the wrong size, or the social platform is showing old information (cache).

What is the ideal size for the preview image?

The recommended size is 1200 pixels wide by 630 pixels tall. This ensures the image looks good on all platforms.

How do I update the preview if I've already shared the link?

After fixing the issue on your website, you can use platform-specific tools (like Facebook's Debugger or Twitter/X's Card Validator) to ask them to fetch the updated information for the link.

Details

Original description by the author

Fix social sharing previews so URLs render as rich cards on Facebook, LinkedIn, X/Twitter, WhatsApp, Telegram, and more. Covers OG tags, Twitter cards, absolute image URLs, and debugging.

repo: sickn33/agentic-awesome-skills

Popularity

GitHub stars
48k
Ranking position
#4207
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills