Platform · Placements

Earnings per URL – not per domain.

Most affiliate reports can tell you that yourblog.com earned DKK 4,200. That is information, not insight. What you need is which article earned it – because that is the one you should write five more of. Here is the mechanism that makes it work without tracking a single visitor.

The starting point

The referrer only tells you the domain.

When someone clicks a link, the browser sends a Referer header along. In 2026 it is trimmed by default to the origin: https://yourblog.com – never the path. It is the browser’s privacy choice, and it is not a problem that can be configured away.

The consequence is that your whole site collapses into one row in the report. If you write 200 articles, you know how much they earn together, and nothing about which of them carry the rest. There are two ways out, and both are automatic: the link itself can ask the browser to send the full address (our HTML code has referrerpolicy), or the script can ask the page itself instead of asking the browser.

Auto-tagging

A script that only touches your own links.

  1. The script goes somewhere on your site

    <script src="https://app.affilyflow.com/placement.js" defer></script>

    One line, in the same place as everything else you put in your header or footer. That is the whole installation.

  2. Only your Affilyflow links are touched

    a[href] → /go/… → ?placement=…

    The script finds the links on the page that point to a /go link and adds the page’s own address to them. Every other link on the page is left alone.

  3. The address is cleaned before it is sent

    https://yourblog.com/best-coffee-grinder

    Only origin and path – query and hash are trimmed away, so the same page is not split into fifteen rows because someone came via a campaign link parameter.

  4. The placement is frozen on the click

    clicks.placement_url

    At the click, the address is written on the click row. The conversion inherits it from the click, so a sale always points back to the page that actually created it – even if you edit the page afterwards.

Just as important: what the script does not do. It sets no cookie, reads no visitor data, builds no profile and sends nothing home. It changes the href on your own links, and that is where it stops. Data only arises when someone clicks – and that data is the click, not the person.

Data quality

Coverage tells you whether the numbers can be used.

A calm panel shows what share of the clicks from your sites have the exact page – in total and per site, with the one fix that is missing where it is missing. From 80% the site is covered. Clicks from social media, email and apps are not included: there is no page.

The report is not wrong below 80% – it is incomplete, and the difference is worth knowing before you decide to retire an article. Typical causes: the script is only on part of the site, or some links are shared somewhere you do not control yourself, such as a newsletter or a video description.

The priority is known, so you can work backwards: if ?placement= from the script is there, it is used. Otherwise a referrer with a path – from our HTML code, or from your own redirect such as /go/, which is then shown as it is. Otherwise the page you wrote on the link yourself. Otherwise only the domain. Every click shows which of them the page came from.

Sources of the placement

1 · Script
?placement= · exact URL, also in Safari
2 · HTML link
the full referrer · exact URL
3 · Stated on the link
your information, not measured
4 · Domain only
the site is known, the page is not
Not a site
social media, email, apps – no page

The report

What the table actually shows.

Placement drill-down · domain → page → product

Sample data

Level: /guides/best-coffee-grinder-2026. 612 clicks, 41 sales, 5,980 kroner, EPC 9.77 kroner per click, conversion rate 6.7 per cent. Sample data.

90%

Coverage

What the page sold

  • Ceramic hand grinder18 pcs · 3,240 DKK
  • Pour-over kettle, 1 l13 pcs · 1,690 DKK
  • Filters, pack of 10010 pcs · 1,050 DKK

Taken from the order lines. Not “the page earns money”, but what it sells – so you know what should take up more space.

Sample data · fictional pages and fictional numbers · shows the shape of the report, not anyone’s earnings

  • Domain → page

    First totalled per domain, then expanded per single URL. If you have several sites, you can compare them without leaving the page.

  • EPC and conversion rate

    Clicks, sales and earnings per page, plus earnings per click and conversion rate. Rejected sales do not count as earnings.

  • Top 3 products per page

    Which products the page actually sold, taken from the order lines. Not “the page makes money”, but what it sells – so you know what should take up more space.

  • Trend 30 against 30

    The last 30 days against the 30 before. Shown only when there is enough history. It is the number that reveals an article that is dying out while there is still time to update it.

For a content affiliate, this is the difference between guessing and knowing. Ten articles with the same commission rate rarely earn the same – and the difference almost never lies in the rate, but in which purchase intent the page captures.

Scope

What it is not.

It is not web analytics. There are no visitor numbers, no sessions, no heatmaps, no funnels. If you want to know how many people read the article, you still need your own analytics tool – this only tells you what happened after the click.

Nor is it cross-device tracking. If someone clicks on their phone and buys on their laptop, the sale does not exist in the report. It is the same limit as the rest of the tracking – we build no identity graph, here either.

Questions

What people actually ask.

Does the script track my visitors?
No. placement.js sets no cookie, reads no visitor data and sends nothing home. The only thing it does is add the page’s own address to your own Affilyflow links on the page. Data only arises when someone clicks one of your links – and then it is the click we record, not the person.
Does it work on a SPA or with infinite scroll?
Yes. In addition to the pass when the page loads, a MutationObserver watches for links that are inserted later – SPA navigation, infinite scroll, pop-ups – and tags them too.
What if I cannot add a script to my site?
Then you insert your links with “Copy HTML” from the dashboard. The code has referrerpolicy="no-referrer-when-downgrade", which asks the browser to send the full page address – Chrome, Edge and Firefox do. Safari and some apps still send only the domain; there, the script is what gives you the page. You can also write the page on the link, but that is a piece of information, not a measurement.
Do I have to tag my links to a site?
No. The site and the page are measured per click, based on where the click came from – across all your links and programs. A new site shows up by itself under My sites, and the same link can show its numbers per page if it appears in several places. The sub-ID is still there, but only for telling apart things that are not pages, for example two Instagram posts.
Why do some pages show no trend?
Because there is not enough history to compare. The trend is calculated as the last 30 days against the 30 days before. If the basis is too thin, nothing is shown rather than a number that would look like a trend without being one.

Find out which page carries your site.

Create an account, insert your links as HTML or add the line to your site, and see your earnings spread out per URL instead of lying in one pile.