---
title: "Measure external article visits and conversions"
description: "Configure consented tracking for verified full articles on your own website."
updated: "2026-09-11"
verifiedAgainst:
  - apps/web/components/publishing-integration-analytics.tsx
  - apps/web/public/integrations/analytics-v1.js
  - apps/web/lib/server/publishing-integrations-analytics.ts
  - apps/web/app/api/integrations/analytics/events/route.ts
---

Open **Integrations → Analytics** to configure external article measurement.
This report is separate from your hosted-blog analytics and does not change
billing or article usage.

## Enable collection

An owner or admin selects **Collect consented external website events**, chooses
the verified destination origins, names the conversion events, and saves.
Use up to ten lowercase event names, such as `signup`, `trial_started` and
`demo_requested`. Use event names rather than personal data.

Copy the **Installation and conversion example** from the section into your
website's consent-manager integration. It includes your Project's public tracking
identifier. Call `enableBloggedAnalytics()` after consent and
`disableBloggedAnalytics()` when consent is withdrawn.

The SDK honors Global Privacy Control and Do Not Track. After a successful
signup, call `window.BloggedAnalytics?.conversion("signup")`. In a single-page
application, call `window.BloggedAnalytics?.page()` after route changes.

## Send a server conversion

Create a separate **Send server analytics** key in **Developer API**. Your
server can POST a consented conversion to
`https://app.blogged.dev/api/integrations/analytics/events` using Bearer
authorization and JSON such as:

```json
{
  "siteId": "YOUR_PROJECT_ID",
  "eventId": "YOUR_UNIQUE_EVENT_ID",
  "type": "conversion",
  "conversionName": "signup",
  "articleUrl": "https://your-site.example/blog/verified-article",
  "consent": true
}
```

Reuse the same event ID for retries. Your application owns attribution when a
conversion occurs on another origin; send the original verified full article URL
and only send when you have the required consent.

## Interpret the report

A browser-tab session counts an article visit once per 30 minutes. Only configured
conversion names and verified full-article URLs are accepted. Event IDs deduplicate
for 30 days, and daily aggregates expire after 90 days. Privacy controls, blockers,
ingestion limits and missing attribution can reduce totals. These figures describe
content attribution; they are not billing evidence.

Do not send names, emails, account IDs, IP addresses or arbitrary properties.
Hosting request logs are separate from the analytics event records.

If no events arrive, check collection, origin selection, snippet installation,
consent, privacy opt-outs and the article's **Live** status. Test one consented
visit and conversion, then withdraw consent and check that sending stops.
See [troubleshooting](/integrations/troubleshooting).
