Own the conversation
about your pages
Verify your domain, subscribe and add the comment block, and the discussions on your pages become yours to run, moderate and switch off. The comment-count badge stays free.
What a plan adds
One script tag renders a full discussion on your own site. Shadow DOM, so nothing leaks into your styles. Readers need no account.
Nobody but you can open a comment page for your URLs. Pages strangers already made are removed. Your own embed keeps working.
Every discussion your comment block opened or took over, in one place, with a Remove button on each comment.
Unlimited comments. Cancel any time.
Prove the domain is yours
Nothing above unlocks until we can see a tag we gave you on the site itself. Three steps, once per domain.
- Add the domain in the partner dashboard and copy the tag it shows you.
- Paste it into the
<head>of your homepage. - Press Verify. We fetch your homepage once and look for the tag.
<meta name="comment-page-verification" content="cp-…">
The tag has to be in the HTML your server sends. A tag injected later by JavaScript will not be seen.
The comment block
Once the domain is verified and subscribed, drop this where the discussion should appear:
<script src="https://comment.page/embed.js"></script>
It comments on the page it sits on. Add data-url to point it somewhere else, and data-theme="light" or "dark" to override the reader's system preference.
Discussions that already exist. If people opened a comment page for one of your URLs before you subscribed, it is not yours yet — verifying and subscribing change nothing on it. It becomes yours the first time your comment block loads on that exact URL: the comments carry over, you can remove them, and its public page starts showing Moderated by site owner. Your dashboard lists these under Already being discussed.
The free badge
A comment count that links to the discussion. Free on any approved domain, no plan needed. Add this script tag anywhere in your HTML:
<script src="https://comment.page/widget.js"
data-url="https://example.com/your-page"></script>
Shown until your domain is registered and approved. Links to the home page.
Badge attributes
| Attribute | Required | Description |
|---|---|---|
src | Yes | URL to the widget script |
data-url | Yes | The page URL to show widget data for |
Badge API reference
The widget fetches data from the JSON API. You can call it directly too.
/widget?url={pageUrl}
// Response
{
"url": "https://example.com/your-page",
"status": "active",
"commentCount": 42,
"hot": true
}
| Field | Type | Description |
|---|---|---|
| url | string | The queried page URL |
| status | string | active new closed suspended banned not_found — the badge shows a green dot only for active |
| commentCount | number | Total comments on the page, removed ones included |
| hot | boolean | True once the page has more than 10 comments |
Badge examples
Basic embed
Place the widget next to your article title or in a sidebar.
<h2>My Blog Post</h2>
<script src="https://comment.page/widget.js"
data-url="https://myblog.com/post/123"></script>
Custom integration via API
Fetch data directly and render your own UI.
const url = encodeURIComponent('https://myblog.com/post/123');
const res = await fetch(`https://comment.page/widget?url=${url}`);
const data = await res.json();
// data.status → "active"
// data.commentCount → 42
// data.hot → true
Good to know about the badge
Style isolation
Shadow DOM keeps your CSS and the widget completely separate.
Graceful fallback
If the page is unreachable the widget stays invisible; unapproved domains show a clear hint. Never breaks your layout.
60s cache
Counts update within a minute.
Click to discuss
Clicking the widget opens the discussion page in a new tab.
Register your site
Submit your details. Approval turns the free badge on for your domains and opens the partner dashboard, where you verify a domain and start a plan.
Pending approval. We’ll email you, then sign in at the dashboard.
Something went wrong. Please try again.