# Missing og:url

> og:url tells platforms the canonical address to credit shares to, even with tracking params. Set it so shares consolidate.

_Category: Search visibility · Detector `seo` · Check `og-url-missing` · Severity: info_

`og:url` tells social platforms which canonical address a share belongs to, so likes and shares of the same page via different tracking links consolidate onto one URL. Without it, a page shared with `?utm_source=…` can be treated as a separate object, splitting its social signals.

## Symptoms

- The same page shared with different query params counts as separate shares
- Share counts and engagement fragment across tracking URLs
- Platforms echo the messy tracking URL instead of the clean one

## How VibeCheck detects it

The `seo` detector flags this live in the browser and reports it to the widget's Problems list — and to your coding agent over MCP.

- **Issue string:** `Missing og:url`
- **Threshold:** no <meta property="og:url">

## Root causes

- `og:*` tags were partially implemented — image and title landed, url did not
- No canonical URL strategy exists, so there is no clean URL to point at
- The `<head>` is unmanaged, so no `og:*` tags are emitted
- The page is reachable at several URLs (params, trailing slash) with none declared canonical

## The fix

Add `og:url` with the page’s clean, absolute canonical URL — no tracking parameters. It should match your `<link rel="canonical">`.

### Steps

1. Determine the clean canonical URL for the page
2. Emit it as `<meta property="og:url">`
3. Keep it in sync with your canonical link

```html
<meta property="og:url" content="https://acme.com/pricing" />
```

## Framework-specific fixes

### React

Render the `og:url` tag with the absolute canonical URL (React 19).

```tsx
<meta property="og:url" content="https://acme.com/pricing" />
```

### Next.js

Set `openGraph.url`; keep it identical to `alternates.canonical`.

```tsx
export const metadata: Metadata = {
  openGraph: { url: 'https://acme.com/pricing' },
  alternates: { canonical: 'https://acme.com/pricing' },
}
```

### Vue

Add the `og:url` entry to `useHead`, building the absolute URL from the current route.

```ts
useHead({ meta: [{ property: 'og:url', content: 'https://acme.com/pricing' }] })
```

### Svelte

Emit it in `<svelte:head>`, matching your canonical link and building the URL from `$page.url`.

```svelte
<script>
  import { page } from '$app/stores'
</script>

<svelte:head>
  <meta property="og:url" content={`https://acme.com${$page.url.pathname}`} />
</svelte:head>
```

### Vanilla JS

Add the `og:url` tag to each page’s `<head>` with the clean, absolute canonical URL — no tracking params.

```html
<meta property="og:url" content="https://acme.com/pricing" />
```

## FAQ

### Should `og:url` match my canonical link?

Yes. Keep `og:url` identical to `<link rel="canonical">` so social and search agree on the one true URL for the page.

### Should `og:url` include tracking parameters?

No. Strip `utm_*` and other params so shares consolidate onto the clean URL.

### What happens if `og:url` points at the wrong page?

Platforms credit the share — and its engagement — to whatever `og:url` says, and echo that URL in the card. A stale or wrong value sends clicks to the wrong page, so build it from the current route, not a hardcoded string.

### Do I need `og:url` if I already set a canonical link?

They serve different consumers: `<link rel="canonical">` is for search engines, `og:url` is for social platforms. Set both, and keep them identical.

## Related problems

- [Missing canonical link](https://vibecheck.wcgw.fun/fix/missing-canonical-url.md) — Search visibility
- [Missing social preview image (og:image)](https://vibecheck.wcgw.fun/fix/missing-og-image.md) — Search visibility
- [Missing og:title](https://vibecheck.wcgw.fun/fix/missing-og-title.md) — Search visibility
- [Unfriendly URL slug](https://vibecheck.wcgw.fun/fix/unfriendly-url-slug.md) — Search visibility

---

Fix guide from VibeCheck — https://vibecheck.wcgw.fun/fix/missing-og-url. Full site index for LLMs: https://vibecheck.wcgw.fun/llms.txt
