# Attribute “xmlns:og” not allowed here.

> Canonical HTML version: https://rocketvalidator.com/html-validation/attribute-xmlns-og-not-allowed-here
> Attribution: Rocket Validator (https://rocketvalidator.com)
> License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

In older XHTML documents, XML namespaces were declared using the `xmlns` attribute with a prefix, such as `xmlns:og="http://ogp.me/ns#"`. While this syntax was valid in XHTML, HTML5 does not support custom XML namespace declarations on the `<html>` element. The W3C validator will flag any `xmlns:*` prefixed attribute (like `xmlns:og`, `xmlns:fb`, etc.) as invalid because HTML5 has a strictly defined set of allowed attributes on the `<html>` element.

The Open Graph Protocol, originally developed by Facebook, allows web pages to become rich objects in a social graph. Major platforms like Facebook, Twitter, LinkedIn, and others rely on Open Graph `<meta>` tags to generate link previews. The official [Open Graph Protocol specification](https://ogp.me) recommends using the `prefix` attribute on the `<html>` element instead of the `xmlns:og` namespace declaration.

The `prefix` attribute is part of the RDFa specification and is recognized by HTML5 as a valid way to declare vocabulary prefixes. By switching to `prefix="og: https://ogp.me/ns#"`, you maintain full Open Graph functionality while keeping your HTML valid.

## How to fix it

1. Locate the `<html>` tag in your document.
2. Remove any `xmlns:og` (or similar `xmlns:*`) attributes.
3. Add or update the `prefix` attribute with the appropriate namespace declaration.

If you use multiple prefixes (e.g., Open Graph and Facebook-specific tags), you can combine them in a single `prefix` attribute, separated by a space.

## Examples

### ❌ Invalid: Using `xmlns:og` (XHTML-style namespace)

```html
<!DOCTYPE html>
<html lang="en" xmlns:og="http://ogp.me/ns#">
<head>
  <title>My Page</title>
  <meta property="og:title" content="My Page Title" />
  <meta property="og:type" content="website" />
  <meta property="og:url" content="https://example.com/" />
  <meta property="og:image" content="https://example.com/image.jpg" />
</head>
<body>
  <p>Page content here.</p>
</body>
</html>
```

This triggers the validator error: **Attribute "xmlns:og" not allowed here.**

### ✅ Valid: Using the `prefix` attribute

```html
<!DOCTYPE html>
<html lang="en" prefix="og: https://ogp.me/ns#">
<head>
  <title>My Page</title>
  <meta property="og:title" content="My Page Title" />
  <meta property="og:type" content="website" />
  <meta property="og:url" content="https://example.com/" />
  <meta property="og:image" content="https://example.com/image.jpg" />
</head>
<body>
  <p>Page content here.</p>
</body>
</html>
```

### ✅ Valid: Multiple prefixes (Open Graph and Facebook)

If you also use Facebook-specific meta tags (like `fb:app_id`), declare both prefixes:

```html
<!DOCTYPE html>
<html lang="en" prefix="og: https://ogp.me/ns# fb: https://ogp.me/ns/fb#">
<head>
  <title>The Rock (1996)</title>
  <meta property="fb:app_id" content="123456789" />
  <meta property="og:title" content="The Rock" />
  <meta property="og:type" content="video.movie" />
  <meta property="og:url" content="https://www.imdb.com/title/tt0117500/" />
  <meta property="og:image" content="https://ia.media-imdb.com/images/rock.jpg" />
</head>
<body>
  <p>Page content here.</p>
</body>
</html>
```

### ❌ Invalid: Multiple `xmlns` declarations

This older pattern with multiple namespace declarations is equally invalid in HTML5:

```html
<html xmlns:og="http://ogp.me/ns#" xmlns:fb="http://ogp.me/ns/fb#">
```

Replace it with the single `prefix` attribute as shown in the examples above.
