# Google Analytics

> Lad track.js læse købet fra Google Analytics 4 med data-sale="ga4" – ingen kode på kvitteringssiden.

Sender jeres site allerede købet til Google Analytics 4 – via Google Tag Manager (`dataLayer`) eller `gtag` – kan [track.js](https://www.affilyflow.com/docs/reference/track-js) læse ordrenummer og beløb derfra. Så skal ingen kende skabelonens feltnavne, og der er intet at indsætte på kvitteringen.

## Slå det til

Tilføj `data-sale="ga4"` til scriptet på alle sider. Den rigtige linje med jeres indstillinger står under Opsætning i butikkens dashboard.

```html title="<head> · alle sider"
<script src="https://app.affilyflow.com/track.js" data-store="DIN_BUTIK" data-sale="ga4" data-sale-vat="25" async></script>
```

| Attribut | Værdi |
|---|---|
| `data-sale="ga4"` | Læs købet fra Google Analytics 4. Uden den ignoreres Google Analytics helt. |
| `data-sale-vat` | Momsen i procent, som Google Analytics-beløbene indeholder. `25` hvis beløbene er med dansk moms; udelad den, hvis de er uden moms. |
| `data-sale-shipping` | `incl` hvis fragten altid er med i `value`, `excl` hvis den aldrig er. Uden attributten gætter scriptet. |

> [!WARNING]
> Brug kun en vej til salget. Har sitet WooCommerce-pluginnet eller [salgslinjen](https://www.affilyflow.com/docs/reference/salgslinje) på kvitteringen, så slå ikke `data-sale="ga4"` til – ellers kan samme køb blive meldt to gange med hvert sit ordrenummer. Derfor er Google Analytics-vejen kun aktiv med attributten.

## Formater, der læses

Købshændelsen `purchase` læses i alle tre former:

```js title="Google Tag Manager · dataLayer"
dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: '1008',
    value: 675,
    shipping: 49,
    currency: 'DKK',
    items: [{ item_id: '317', price: 375, quantity: 2 }]
  }
});
```

```js title="gtag"
gtag('event', 'purchase', { transaction_id: '1008', value: 1000, currency: 'DKK' });
```

En `purchase`-hændelse i `dataLayer` uden `ecommerce`-objekt læses også – så tages felterne direkte fra hændelsen.

- Hændelser, der allerede ligger i `dataLayer`, når scriptet indlæses, læses straks.
- Hændelser, der kommer bagefter, fanges med det samme – også når Tag Manager indlæses efter track.js. Desuden tjekkes `dataLayer` hvert sekund i 60 sekunder.
- Andre hændelser (`view_item`, `add_to_cart` …) ignoreres.
- Et køb uden `transaction_id` ignoreres.
- Hvert ordrenummer meldes en gang pr. side; browserens og serverens dubletværn stopper resten.

### Felter, der bruges

| Felt | Bruges til |
|---|---|
| `transaction_id` | Ordrenummeret. Påkrævet. |
| `value` | Ordrens beløb. |
| `shipping` | Fragten, der trækkes fra, når den er med i `value`. |
| `items[].price` og `items[].quantity` | Varelinjernes sum (`quantity` er 1, hvis den mangler). Bruges, når `value` mangler, og til at gætte, om fragten er med. |
| `currency` | Valutaen. Mangler den, bruges den første varelinjes `currency`, ellers `DKK`. |

`tax` læses ikke. Momsen trækkes ud med `data-sale-vat`.

## Sådan regnes beløbet

1. Udgangspunktet er `value`. Er den 0 eller mangler, bruges varelinjernes sum.
2. Fragten trækkes fra, når `shipping` er over 0, og enten `data-sale-shipping="incl"` er sat, eller (uden `excl`) `value` er større end varelinjernes sum – så er fragten regnet med i `value`.
3. Med `data-sale-vat` divideres med 1 + moms/100.
4. Resultatet rundes til to decimaler. Er det ikke over 0, meldes intet, og konsollen viser `Affilyflow: the purchase event has no amount – the sale was not recorded.`

| `value` | `shipping` | Varelinjer | Indstilling | Meldt |
|---|---|---|---|---|
| 675 | 49 | 750 | moms 25 | 540 |
| 799 | 49 | 750 | moms 25 | 600 |
| 724 | 49 | 750 | moms 25, fragt `incl` | 540 |
| 1000 | – | – | moms 25 | 800 |
| 540 | – | – | ingen moms | 540 |

> [!NOTE]
> En rabat, der er større end fragten, kan narre gættet: `value` bliver mindre end varelinjerne, selvom fragten er med. Sæt `data-sale-shipping="incl"` (eller vælg det i Opsætning), hvis jeres `value` altid indeholder fragten.

## Serveren regner igen

Ud over beløbet sender scriptet Google Analytics' rå tal med salget: `value`, `shipping` og varelinjernes sum. Har butikken gemt sin Google Analytics-opsætning under Opsætning i dashboardet (moms og fragt), regner serveren beløbet igen med den – med præcis samme regel som ovenfor.

- En rettelse af moms eller fragt i Opsætning virker fra næste salg. Scriptet skal ikke lægges op igen.
- Serverens beløb bruges kun, hvis det er over 0 og ikke over det, Google Analytics selv sagde. Ellers bruges scriptets beløb.
- Uden en gemt Google Analytics-opsætning bruges scriptets beløb, som attributterne gav.
- Kun salg fra Google Analytics-vejen regnes om. Salg fra salgslinjen, `affilyflow.conversion()` og integrationerne røres ikke.

Live-testen under Opsætning viser det beløb, der kom frem, så I kan se, om moms og fragt er rigtige. Se [Test og fejlfinding](https://www.affilyflow.com/docs/butik/test-og-fejlfinding).

## Samtykke og klik

Google Analytics-vejen følger de samme regler som resten af track.js:

- Uden et affiliateklik i browseren sendes intet.
- Med `data-consent="required"` venter salget, til den besøgende har givet samtykke til marketing. Se [Samtykke og cookies](https://www.affilyflow.com/docs/butik/samtykke-og-cookies).

Kilde: https://www.affilyflow.com/docs/reference/google-analytics
