# Plain HTML

> Paste the Taggor snippet in a static HTML page and place a component.

> Esta página ainda não tem tradução para o português; este é o texto em inglês. (This page is not translated yet: the English text follows.)

## Install the snippet once

Paste this once per page, in `<head>` or just before `</body>`:

```html title="index.html"
<script async src="https://cdn.taggorcdn.com/s/<site-key>.js"></script>
```

`async` runs the script as soon as it is fetched without blocking the parser; `defer` waits for the parse
and keeps order (MDN, script, `https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/script`, read 2026-11-09). The loader depends on no other script, so `async` is right for it.

## Place the component

```html title="index.html"
<contact-form heading="Get in touch"></contact-form>
```

A prop is an attribute, and an attribute carries text: lists and objects need the element's property, see
[Components in React, Vue and Angular](https://taggor.dev/docs/framework-interop.md).

## Limits

- A site with a Content-Security-Policy needs the `nonce` and the CDN origin: [Install the snippet](https://taggor.dev/docs/snippet.md#content-security-policy).
- The page keeps whatever you wrote inside the tag when the script cannot run: [Fallback content](https://taggor.dev/docs/fallback.md).

## Common problems

- **Nothing appears.** Open the browser console: a Content-Security-Policy violation names the directive to
  allow, and a `taggor` warning names the domain list ([Allowed domains](https://taggor.dev/docs/edge/domains.md)).
- **The page jumps when the component appears.** Reserve its size with `:not(:defined)`.

## How we checked

The plain page runs in the compatibility matrix with the real loader, in Chromium, Firefox and WebKit and two
mobile emulations, with the snippet in the head and at the end of the body.
