Email copied to clipboard!

Engineering the "Digital Signboard": Mastering Open Graph (OG) Metadata for Global K-Beauty Expansion

Beauty Insight Editor
2026-01-195 min read

Key Takeaways

  1. 디지털 간판(Signboard) 엔지니어링: Open Graph(OG) 태그는 단순한 메타데이터가 아니라, 소셜 미디어라는 거대한 거리에서 우리 서비스를 알리는 '간판'입니다. 페이지별로 특화된 OG 이미지를 설정하여 클릭률(CTR)을 극대화했습니다.
  2. 동적 OG 이미지 전략: 정적인 이미지 대신 GIF(export.gif, fda.gif)를 사용하여 플랫폼의 핵심 기능(데이터 시각화, AI 분석)을 직관적으로 보여주었습니다.
  3. PDF 생성과 렌더링 최적화: framer-motion과 PDF 생성 라이브러리 간의 충돌 문제를 해결하고, 워터마크 시스템을 도입하여 브랜드 아이덴티티를 강화했습니다.

Why does Open Graph Metadata matter for "Glocal" Services?

When expanding a K-Beauty service globally, your link is often the first interaction a potential B2B partner or investor has with your brand. Whether it's shared on LinkedIn, WhatsApp, or KakaoTalk, the "preview card" determines whether they click or scroll past.

We treat Open Graph metadata not just as technical configuration, but as "Digital Signboard Engineering". Just as a physical store needs an attractive signboard, each route of our Next.js application needs a tailored preview that communicates its specific value proposition instantly.

Why we chose tailored assets for each route?

Instead of a single generic banner, we implemented a granular strategy:

RouteContentOG Asset TypePurpose
/ (Home)Live Dashboardexport.gifShowcasing real-time data visualization capabilities.
/localizationAI Agent Demofda.gifDemonstrating the AI's ability to fix compliance issues.
/pitchL'Oréal Pitchbig-bang-og.pngProfessional branding for investor relations.
/blogTech Insightsblog-og.pngHighlighting thought leadership and technical depth.

How we implemented Dynamic OG Metadata in Next.js 15

Next.js 14+ and 15 provide a powerful Metadata API that allows us to define static and dynamic metadata easily. Here is how we configured our global layout and specific page overrides.

1. Global Signboard Configuration (Layout)

The root layout serves as the default signboard. We selected export.gif to immediately convey that our service is about "Data" and "Actionable Insights".

// frontend/app/layout.tsx
import type { Metadata } from "next";
 
export const metadata: Metadata = {
  title: {
    template: '%s | Beauty Insight Lab',
    default: 'K-Beauty Export Tracker & AI Localization Agent',
  },
  description: "Real-time K-Beauty export statistics and AI Marketing Localization.",
  openGraph: {
    title: 'K-Beauty Export Tracker & AI Localization Agent',
    description: "Real-time K-Beauty export statistics (HSK 3304) and AI Marketing Localization.",
    url: 'https://beautyinsightlab.com',
    siteName: 'Beauty Insight Lab',
    images: [
      {
        url: '/export.gif', // Dynamic visual for high engagement
        width: 1200,
        height: 630,
        alt: 'K-Beauty Export Tracker Live Demo',
      },
    ],
    locale: 'en_US',
    type: 'website',
  },
  twitter: {
    card: 'summary_large_image',
    title: 'Beauty Insight Lab',
    images: ['/export.gif'],
  },
};

2. Page-Specific overrides

For our specialized Localization Agent page, we override the default image with fda.gif to show the specific AI workflow.

// frontend/app/localization/page.tsx
export const metadata: Metadata = {
    title: 'AI Localization Agent | FDA Compliance & Transcreation',
    description: "Convert Korean cosmetic descriptions into US-compliant marketing copy.",
    openGraph: {
        // ... specific title & description
        images: [
            {
                url: '/fda.gif', // Overriding with specific feature demo
                width: 1200,
                height: 630,
                alt: 'AI Localization Agent Interface',
            },
        ],
    },
    // ...
};

Technical Challenge: PDF Generation vs. Animations

While polishing our Pitch Deck (/pitch), we encountered a critical issue where the PDF download feature resulted in blank pages.

What is the cause of blank PDF pages?

We use framer-motion for rich entry animations (fade-ins, slide-ups). However, when libraries like html-to-image or jspdf capture the DOM, they often capture the initial state of the elements.

If an element is set to opacity: 0 (initial state) and waits for a whileInView trigger, the PDF generator—which effectively renders the page in a hidden container off-screen—never triggers the "in view" event. The result? Invisible content.

How to fix it: The pdfMode Prop

We solved this by introducing a pdfMode prop that forces elements to their final visual state, bypassing animations during the capture process.

// Example: Slide Component Adjustment
export const MarketSlide = ({ pdfMode }: { pdfMode?: boolean }) => {
    return (
        // ... container
        <motion.div
            initial={{ opacity: 0, x: -50 }}
            // If pdfMode is true, disable whileInView (set to undefined)
            whileInView={pdfMode ? undefined : { opacity: 1, x: 0 }}
            // Force the final state immediately if pdfMode is true
            animate={pdfMode ? { opacity: 1, x: 0 } : undefined}
            transition={{ duration: 0.6 }}
        >
            {/* Content */}
        </motion.div>
    );
};

This ensures that when the DownloadPdfButton renders the slides for capturing, they are fully visible and static, resulting in a perfect PDF export.


What is the most efficient way to track K-Beauty exports?

Beyond just improved link previews, our platform allows brands to track export data instantly. By visualizing HSK 3304 codes through our dashboard (as seen in the export.gif), we reduce the time needed to gather market intelligence from days to seconds. This "Signboard" is not just for show—it reflects the core efficiency of our underlying architecture.


This project is part of our journey to expand K-Beauty globally using AI.