Getting Started
Cloaked protects your published content by rendering it as Canvas-drawn glyphs instead of selectable DOM text. Scrapers and copy-paste tools see nothing useful — your readers see your content exactly as intended.
Setup takes three steps:
- 1
Create an account
Sign up at cloaked.ink with email or a Google/GitHub account.
- 2
Register your site and select posts to protect
In the dashboard, add your WordPress or Ghost site. Cloaked discovers your published posts — pick the ones you want protected.
- 3
Install the widget on your site
Add a single script tag (or the WordPress plugin) and your content is rendered through Canvas. Follow the CMS-specific guide below.
WordPress Quickstart
- 1
Sign up at cloaked.ink
Create your account if you haven't already.
- 2
Add your WordPress site
Go to Dashboard → Sites → Add site. Select WordPress and enter your site domain.
The WordPress REST API is public by default, so no API key is needed for most sites. If your site requires authentication (e.g. private posts), create a WordPress Application Password: go to
Users → Profile → Application Passwordsin WP Admin, generate a new password, and paste it into the API key field. - 3
Select posts to protect
Cloaked discovers your published posts automatically. Select the ones you want to protect from the list.
- 4
Download and install the WordPress plugin
On your site's detail page in the dashboard, download the Cloaked WordPress plugin ZIP. The plugin comes pre-configured with your Site ID.
In WP Admin, go to
Plugins → Add New → Upload Plugin, upload the ZIP file, and click Activate. - 5
Verify it works
In WP Admin, go to
Settings → cloaked.ink. You should see the Enable toggle (on by default) and your Site ID. Visit a protected post on your site — the content should render as Canvas graphics instead of selectable text.
Ghost Quickstart
- 1
Sign up at cloaked.ink
Create your account if you haven't already.
- 2
Create a Ghost integration
In Ghost Admin, go to
Settings → Integrations → Add custom integration. Name it something like "Cloaked" and copy the Content API key. - 3
Add your Ghost site
Go to Dashboard → Sites → Add site. Select Ghost, enter your Ghost domain, and paste the Content API key.
- 4
Select posts to protect
Choose which posts to protect from the discovered list.
Note on SEO: Ghost automatically includes a ~100-word excerpt of each post in the page's meta description for search engine indexing. This is standard Ghost behavior and is not controlled by Cloaked. The full post body is still rendered exclusively through the Canvas widget and cannot be copied or scraped.
- 5
Embed the widget script
Add the Cloaked loader script to your Ghost site. Replace
YOUR_SITE_IDwith the Site ID shown in your dashboard.Ghost(Pro): Go to
Ghost Admin → Settings → Code Injection → Site Headerand paste:<script src="https://cdn.cloaked.ink/w.js" data-clk-site="YOUR_SITE_ID" async></script>Self-hosted: Add the same script tag to your theme's
default.hbsfile before</head>. - 6
Verify it works
Visit a protected post on your Ghost site. The content should render as Canvas graphics instead of selectable text.
Widget Embed Reference
The Cloaked widget is loaded via a single <script> tag. Configuration is done through data-clk-* attributes.
| Attribute | Description |
|---|---|
data-clk-site="site_id" | Site-level auto mode (recommended). The widget auto-detects content containers ( .gh-content, .post-content, .entry-content, .article-content) and protects them automatically. |
data-clk-src="source_id" | Explicit per-post mode. Place a <div data-clk-src="..."></div> where you want the widget to render. |
data-clk-target="selector" | Override the auto-detected content container with a custom CSS selector. |
data-clk-theme="light|dark" | Override the auto-detected theme. Defaults to matching the page background. |
Site-level example — add to your site header and all registered posts are protected automatically:
<script src="https://cdn.cloaked.ink/w.js" data-clk-site="YOUR_SITE_ID" async></script>Per-post example — place a container where you want the protected content:
<div data-clk-src="YOUR_SOURCE_ID"></div>
<script src="https://cdn.cloaked.ink/w.js" async></script>Animation Presets
Cloaked applies subtle canvas animations that make automated screen-capture and OCR less effective. Choose a preset when configuring each content source.
Ambient
Gentle, barely perceptible motion. Best for long-form articles where readability is the top priority. This is the default preset and is available on all plans.
Protected
Moderate animation that increases scraping difficulty while remaining comfortable to read. Recommended for high-value content. Available on Pro and Business plans.
Hardened
Maximum protection with more noticeable animation. Best for premium or sensitive content where preventing copying is critical. Available on Business plans.
Troubleshooting
Widget not loading
Verify the <script> tag is present in your page source. Check the browser console for errors. Confirm the Site ID in the script tag matches the one shown in your dashboard.
Content shows as normal text
Ensure the post is registered as a content source in the dashboard. Check that the site status is active on the Sites page.
CORS errors
Make sure the base URL in your dashboard matches the site's actual domain exactly (including https:// vs http://).
Ghost API key issues
Verify the Content API key is correct and the custom integration is still active in Ghost Admin under Settings → Integrations.
WordPress plugin not injecting
Check Settings → cloaked.ink in WP Admin and confirm the Enable toggle is on and the Site ID is set. If you updated the plugin, deactivate and reactivate it.
Need more help? Contact support