All 20 checks with why-it-matters prose, severity, and cross-references to related audits.
Missing Open Graph tags silently break every social link preview. When a page lacks og:title, og:description, or og:image, platforms like Facebook, LinkedIn, and Slack substitute generic fallbacks — your site name, truncated body text, or no image. The result is a bare URL in a feed instead of a rich preview card. Per ogp.me, all three tags are required for compliant previews; omitting any one degrades the click-through rate for every share of that page. For content-driven sites, this is a direct revenue leak: shares from blog posts, product pages, and landing pages perform significantly worse without complete OG coverage.
Why this severity: Critical because every share of an unconfigured page generates a degraded or empty preview, making social distribution effectively non-functional for that route.
marketing-social-sharing.open-graph.og-all-pages-completeSee full patternA single global OG image — typically the homepage screenshot or company logo — appears on every page share regardless of content. When a product page, blog post, or feature announcement is shared, it shows the same generic image that already appeared on every other share. Per ogp.me, the og:image is the dominant visual element in a link preview card; identical images across all shares collapse the visual distinction that drives clicks. Users scanning a Twitter/X or LinkedIn feed cannot tell from the image alone what the linked page is about. This uniformity is a direct findability failure: content that could attract clicks based on its subject matter is instead indistinguishable from other shares of the same site.
Why this severity: Critical because a single static OG image makes every share visually identical, eliminating the primary click-signal that distinguishes individual content pieces in social feeds.
marketing-social-sharing.open-graph.og-image-per-pageSee full patternOG images below 1200×630 pixels render blurry or cropped on high-DPI screens and in large card formats across Facebook, LinkedIn, and Twitter/X. Per ogp.me, the minimum recommended size is 1200×630; images below 200×200 are rejected outright by some crawlers. When a shared link shows a pixelated or improperly cropped image, it signals low production quality and reduces click-through rates. For product announcements and blog content where the OG image carries marketing copy or visual branding, undersized images make the text illegible in the preview.
Why this severity: High because undersized OG images appear blurry or are rejected by platform crawlers, visibly degrading the appearance of shared links without any indication to the developer.
marketing-social-sharing.open-graph.og-image-dimensionsSee full patternWithout og:url, social platform crawlers cannot reliably deduplicate shares of the same page that arrive via different URLs — such as with UTM parameters, trailing slashes, or HTTP vs HTTPS variants. Per ogp.me, og:url specifies the canonical URL that should aggregate all social engagement signals. When og:url is absent or mismatched with the canonical URL, share counts and engagement metrics fragment across URL variants. This directly affects how platforms surface your content in social feeds and how link preview analytics attribute engagement. The findability impact is concrete: a page shared 500 times across two URL variants may show as two separate posts with 250 shares each rather than one high-engagement result.
Why this severity: High because a missing or mismatched og:url fragments social engagement metrics across URL variants, reducing apparent post engagement and undermining SEO deduplication signals.
marketing-social-sharing.open-graph.og-canonical-matchSee full patternSetting og:type correctly unlocks platform-specific display features. Facebook and LinkedIn parse `og:type: 'article'` to expose article-specific properties — `article:published_time`, `article:author`, and `article:section` — which enable richer presentation in article feeds and content discovery systems. When blog posts use `og:type: 'website'`, these article-specific fields are ignored even if present, and the platform cannot categorize the content correctly. Per ogp.me, the type field is mandatory for structured content; the default `website` type is a catch-all that opts the content out of article-specific distribution features. The findability impact is real for content-driven sites dependent on social amplification.
Why this severity: Medium because incorrect og:type causes article pages to be classified as generic websites, forfeiting article-specific display features on Facebook and LinkedIn without breaking the share entirely.
marketing-social-sharing.open-graph.og-type-appropriateSee full patternog:title is the primary text users see when a link is shared. Titles under 40 characters fail to communicate what the page is about, wasting the preview's most prominent real estate. Titles over 90 characters are truncated at approximately 88 characters on Facebook and 70 on Twitter/X, cutting off meaningful content mid-word. Per ogp.me, og:title is a required field and its visible length determines whether users click through. A 10-character title like 'My App' renders as dead copy in a link preview; a 102-character title gets sliced at an arbitrary point chosen by the platform. Both failures reduce click-through rates on social shares without any visible error to the developer.
Why this severity: Info because title length issues degrade social preview quality but do not break sharing functionality — shares still work, they just perform below their potential.
marketing-social-sharing.open-graph.og-title-lengthSee full patternog:description is the secondary text in every social link preview. Descriptions under 100 characters lack enough context to explain what a page contains, leaving users uncertain whether the link is worth clicking. Descriptions over 300 characters are truncated unpredictably: Facebook shows approximately 250 characters, LinkedIn shows less. Per ogp.me, og:description supplements the title by providing context that drives click intent. A 42-character description leaves the preview half-empty; a 400-character description gets cut mid-sentence, often at a grammatically awkward point that reads as broken copy. Both failures reduce the effectiveness of social sharing as a distribution channel.
Why this severity: Info because description length issues reduce social preview quality and click-through rates but do not prevent sharing from functioning on any platform.
marketing-social-sharing.open-graph.og-description-lengthSee full patternWithout an explicit `twitter:card` tag, Twitter/X selects the card type automatically based on available OG tags. This fallback produces inconsistent results: pages with large hero images may get a `summary` card (small thumbnail) instead of `summary_large_image`, and the card format can differ between share events as Twitter's heuristics change. The twitter:card type determines whether your link preview shows a prominent full-width image or a small inline thumbnail. Per the Twitter Cards spec, explicit configuration is the only way to guarantee card format. A page that should render with a large image card but falls back to a summary card shows a thumbnail that competes poorly in image-forward social feeds.
Why this severity: High because the absence of an explicit twitter:card declaration puts card type selection under Twitter's control, producing inconsistent preview formats that may significantly underperform the intended design.
marketing-social-sharing.twitter-cards.twitter-card-type-setSee full patternTwitter/X's fallback to og:image is documented but not universally reliable. When the og:image URL includes query parameters, signed tokens, or CDN paths that require specific headers, Twitter's crawler may silently fail to fetch the image and render the card without a visual. Per the Twitter Cards spec, an explicit `twitter:image` that uses a clean, unconditional HTTPS URL removes this ambiguity. The reference-integrity failure mode is invisible in development: the image works in browsers but fails when crawled by bots, producing cards that show no image in production social shares without any error signal in your logs.
Why this severity: High because relying on og:image fallback exposes shares to silent image-fetch failures when CDN URLs use query parameters or conditional access patterns that Twitter's crawler cannot navigate.
marketing-social-sharing.twitter-cards.twitter-image-explicitSee full patternThe `twitter:site` tag attributes shared content to your site's Twitter/X account. When someone shares a page from your site, Twitter can display the site's account handle below the card, providing viewers a direct path to follow your account from within the share. Without it, the card is anonymous — there is no account context, no follow prompt, and no attribution signal that accrues to your account. Per the Twitter Cards spec, `twitter:site` is the mechanism by which shares generate account-level visibility. For any project that uses Twitter/X as a distribution channel, omitting this tag means every share generates awareness without routing that awareness back to the account.
Why this severity: Medium because missing twitter:site forfeits account attribution and follow opportunities on every share, reducing the compounding account-growth effect of social distribution.
marketing-social-sharing.twitter-cards.twitter-site-handleSee full patternUsing `summary_large_image` uniformly on utility pages — login, settings, 404, dashboard — generates large image preview cards for pages that have no meaningful OG image and offer no shareable content value. The result is a card that shows a stretched or irrelevant image for a page that wasn't intended to be shared, which creates a confusing experience when users accidentally share these URLs. While this is a low-severity issue, it degrades visual polish: a `/login` page shared in a Slack channel or Twitter DM produces a prominent image-forward card for a page that serves no audience from that share.
Why this severity: Low because incorrect card types on utility pages result in mildly incoherent previews but do not break sharing and are unlikely to cause user-facing failures.
marketing-social-sharing.twitter-cards.twitter-card-type-appropriateSee full patternLinkedIn's crawler (LinkedInBot) does not synthesize fallback values from page content the way some platforms do. If og:title, og:description, or og:image are absent on a page, LinkedIn renders a plain URL with no preview card. Per ogp.me, all three tags are required; LinkedIn enforces this strictly and caches the first result it crawls — meaning a page that went live without complete OG tags may show a degraded preview for months even after the tags are added, because LinkedIn's cache TTL is long and invalidation requires manual intervention via LinkedIn's Post Inspector. Relative og:image paths are an additional LinkedIn-specific failure: the crawler does not resolve relative URLs to absolute, so `/og-image.png` is treated as an unresolvable reference.
Why this severity: High because LinkedIn does not synthesize missing OG fields and aggressively caches the first crawl result, making early deployment of complete tags critical to prevent months of degraded previews.
marketing-social-sharing.platform-specific.linkedin-og-completenessSee full patternLinkedIn crops OG images that fall outside its preferred 1.91:1 aspect ratio. A square 1200×1200 image is cropped to a horizontal strip; a portrait 600×900 image is cropped to a narrow band. The crop is center-based, meaning headline text or logos placed toward the edges of an image optimized for other contexts will be cut off. Per ogp.me, the recommended dimensions are 1200×628, which maps to 1.91:1. Developers who create OG images for general use at square or tall aspect ratios discover the cropping problem only when they check the LinkedIn post-publish preview — after the content has already been shared.
Why this severity: Medium because off-ratio OG images are cropped on LinkedIn without any warning, potentially hiding key visual content from the image and reducing the preview's marketing effectiveness.
marketing-social-sharing.platform-specific.linkedin-image-aspectSee full patternThe `fb:app_id` tag links content shared from your site to a registered Facebook App in Meta's developer portal, enabling access to share analytics via the Sharing Debugger and associating engagement data with your app's metrics dashboard. Without it, Facebook share counts and referral data are visible only in aggregate through Meta Business Suite — there is no app-level attribution. Per ogp.me, fb:app_id is an optional but recommended field for sites that actively track social distribution through Facebook's analytics tools. The impact is analytics-only: users sharing and clicking links are unaffected.
Why this severity: Low because missing fb:app_id only affects Facebook share analytics visibility in the developer portal — it has no effect on how links are displayed or how users share content.
marketing-social-sharing.platform-specific.facebook-app-idSee full patternWhatsApp renders OG previews in a compressed format that truncates og:description at approximately 150 characters. When og:description exceeds 300 characters or buries the key message after the 150-character mark, the message recipient sees a truncated description that ends mid-sentence. WhatsApp does not have its own meta tags — it reads og:description exclusively. Per ogp.me, the description field is the text that contextualizes the link for anyone who receives it in a message. For products shared via messaging (B2C tools, content recommendations, referral links), the WhatsApp preview is often the first impression; a truncated or absent description removes the primary click signal.
Why this severity: Low because WhatsApp preview truncation degrades but does not break sharing — the link still functions, and the title and image remain visible even when the description is cut off.
marketing-social-sharing.platform-specific.whatsapp-og-descriptionSee full patternA static `metadata` export on a dynamic route (`[slug]`, `[id]`, `[username]`) applies identical OG tags to every instance of that route. Every blog post shares the same title, every product page shows the same description, and every user profile presents the same image in social previews. Per ogp.me, og tags are the mechanism social platforms use to generate link preview cards; when all instances of a dynamic route return the same tags, the platform cannot differentiate between content pieces. This is the most common and highest-impact social sharing gap in AI-built projects: content that was individually created gets collectively presented as one undifferentiated link, eliminating per-content shareability entirely.
Why this severity: Critical because static metadata on dynamic routes makes every instance of that route present identically in social feeds, eliminating the individual shareability of each piece of content.
marketing-social-sharing.share-infrastructure.dynamic-og-for-dynamic-contentSee full patternSocial platform crawlers (Facebookbot, LinkedInBot, Twitterbot) do not follow browser URL resolution rules. A relative path like `/og-image.png` in an og:image tag is treated as an unresolvable reference — the crawler makes no attempt to prefix a base URL. Per ogp.me, og:image must be an absolute URL. Similarly, when og:image is constructed from an environment variable like `NEXT_PUBLIC_SITE_URL` that has no fallback, a missing env var in production results in `undefined/og-image.png` — a malformed URL that produces no image. Per CWE-706, using incorrect resource identifiers in safety-critical paths leads to silent failures. These failures are invisible in local development because browsers resolve relative paths correctly.
Why this severity: High because relative og:image paths and unguarded environment variable references cause crawlers to silently fail to load the image, producing card previews with no visual on production shares.
marketing-social-sharing.share-infrastructure.og-image-accessibleSee full patternSocial sharing URLs constructed by string concatenation without `encodeURIComponent` break silently when the page URL or share text contains query parameters, ampersands, hash fragments, or non-ASCII characters. A share button that constructs `https://twitter.com/intent/tweet?url=${pageUrl}` where `pageUrl` is `/products?id=42&color=red` produces a malformed URL: the `&color=red` portion is interpreted as a second top-level parameter to the tweet intent, not part of the content URL. Per CWE-116, failure to encode output in the correct context causes encoding injection. The user-facing result is a broken share flow: the shared URL navigates to the wrong destination or fails to open entirely.
Why this severity: Medium because unencoded share URL parameters cause broken share flows for any page URL containing query parameters or special characters, directly affecting social distribution for parameterized routes.
marketing-social-sharing.share-infrastructure.share-url-encodingSee full patternShareable content without share buttons forces users to copy URLs manually from the address bar, which collapses sharing conversion rates — most readers who would have posted to X, LinkedIn, or a group chat simply don't. This kills organic distribution, which is the primary growth channel for blog posts, case studies, and product pages. Missing share affordances also break the user-experience expectation set by every mainstream content site and directly reduce referral traffic tracked in attribution analytics.
Why this severity: High because missing share buttons directly suppress organic distribution and referral traffic on content designed to be shared.
marketing-social-sharing.share-infrastructure.share-buttons-presentSee full patternSetting `og:type: 'article'` without the corresponding article meta tags (`article:published_time`, `article:author`) signals an incomplete implementation. Facebook's Open Graph explorer and LinkedIn's article feed both parse these supplemental fields to categorize and timestamp content. Per ogp.me and the schema-org Article type, published_time is used by platforms to determine content freshness and sort articles in feeds; author enables attribution to contributor profiles. When the type is 'article' but the fields are absent, platforms fall back to treating the content as a generic article with unknown provenance — forfeiting the structured article display format that the type declaration was intended to unlock.
Why this severity: Low because incomplete article meta tags degrade platform-specific article features but do not break sharing — the og:type declaration still renders a valid card without the supplemental fields.
marketing-social-sharing.share-infrastructure.social-meta-per-content-typeSee full patternRun this audit in your AI coding tool (Claude Code, Cursor, Bolt, etc.) and submit results here for scoring and benchmarks.
Open Social Sharing Audit