On this page

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. 1

    Create an account

    Sign up at cloaked.ink with email or a Google/GitHub account.

  2. 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. 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. 1

    Sign up at cloaked.ink

    Create your account if you haven't already.

  2. 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 Passwords in WP Admin, generate a new password, and paste it into the API key field.

  3. 3

    Select posts to protect

    Cloaked discovers your published posts automatically. Select the ones you want to protect from the list.

  4. 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. 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. 1

    Sign up at cloaked.ink

    Create your account if you haven't already.

  2. 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. 3

    Add your Ghost site

    Go to Dashboard → Sites → Add site. Select Ghost, enter your Ghost domain, and paste the Content API key.

  4. 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. 5

    Embed the widget script

    Add the Cloaked loader script to your Ghost site. Replace YOUR_SITE_ID with the Site ID shown in your dashboard.

    Ghost(Pro): Go to Ghost Admin → Settings → Code Injection → Site Header and 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.hbs file before </head>.

  6. 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.

AttributeDescription
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