WordPress
The Headlark plugin writes each post's title, meta description, Open Graph and X cards, structured data (JSON-LD) and missing image alt text when you publish or update it. The result is stored with the post and printed in the HTML WordPress sends, so Google, Bing and the link previews of Facebook, LinkedIn, Slack and X all see it.
Install
- In the dashboard, add your WordPress site's domain (for example
example.com; subdomains such aswww.example.comare included) and copy its secret key. - Download headlark-wordpress.zip. In WordPress, go to Plugins → Add New Plugin → Upload Plugin, choose the zip and activate it.
- Go to Settings → Headlark, paste the key and save.
Saving the key goes through every published post once, ten posts a minute in the background; the first batch runs right away so the status table shows results. After that, each publish or update is sent once, a few seconds after you save.
The plugin needs pretty permalinks: any structure in Settings → Permalinks other than "Plain".
WP-Cron and a real cron job
Generation runs in WP-Cron. The plugin starts it right after you publish, but WordPress only runs WP-Cron while someone is visiting the site. On a quiet site, or one with DISABLE_WP_CRON set and no system cron, new posts and the backfill can wait for hours or never run. While Settings → Headlark is open, it carries on the backfill itself, so "Regenerate all" finishes as long as you keep the page open. Settings → Headlark shows "Waiting for WP-Cron" when jobs are overdue.
The fix is a real cron job. Add this to wp-config.php:
define( 'DISABLE_WP_CRON', true );
and run WP-Cron every five minutes from the server's crontab (crontab -e), with WP-CLI:
*/5 * * * * wp cron event run --due-now --path=/var/www/html --quiet
or without WP-CLI:
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null
Replace /var/www/html with your WordPress folder and example.com with your domain. Managed hosts usually have a "cron jobs" page for the same line.
Review mode
With review mode on, a post with new SEO keeps its approved SEO (or its own tags) and Settings → Headlark lists it as waiting for review. After you approve it in the dashboard, the plugin picks it up within an hour, in WP-Cron, at no cost.
Page caches
After storing a post's SEO, the plugin clears WordPress's post cache and asks WP Rocket, W3 Total Cache, WP Super Cache, LiteSpeed Cache and Cloudflare (APO) to purge that post, when they're installed. Other caches and CDNs keep serving the old page until they expire; purge them by hand, or hook into the headlark_seo_updated action, which receives the post ID. The plugin's own fetch of each page bypasses caches.
Try it in your browser
This starts a throwaway WordPress in your browser through WordPress Playground, with the plugin installed and a sample post. Add playground.wordpress.net to a site's domains in the dashboard, paste that site's key in Settings → Headlark, then open the sample post and view its source. Playground runs only in your browser, so search engines and link previewers can't reach it.
What it changes
| Tag | What Headlark does |
|---|---|
| Title | Sets the document title, unless another SEO plugin is active. |
| Meta description, Open Graph, X cards | Adds them when the page doesn't already have them. |
| Preview image | A post without an og:image (from your theme or SEO plugin) gets the image Headlark picks from the post, or your site's default share image. After setting the default, Regenerate all in Settings → Headlark adds it to existing posts; unchanged posts cost nothing. |
| Structured data | Adds JSON-LD types the page doesn't already have. |
| Canonical | Only when the page has none. WordPress prints one on posts and pages, so usually never. |
| Robots | Never touched. |
| Image alt text | Fills images with an empty or missing alt. Alt text you wrote stays. |
Yoast SEO, Rank Math and others
With Yoast SEO, Rank Math, All in One SEO, SEOPress or The SEO Framework active, Headlark adds only the tags that plugin doesn't print (usually structured data, X cards and alt text), so nothing appears twice. In Settings → Headlark you can switch Headlark's head tags off instead and keep only the alt text. Activating or deactivating one of these plugins re-checks every post.
What it costs
Nothing runs when someone views a page: the plugin reads what's stored with the post. Each post's first write counts toward your plan's pages; after that an update only uses a rewrite when the post's own content changes. Re-checking unchanged posts is free.
Privacy
The plugin sends the HTML and URL of your published posts to Headlark with your secret key, when you publish or update and once for existing posts. It sends nothing when visitors view your pages, loads no external scripts and adds no tracking. The key is stored in your site's options and the settings page only shows its last four characters. Deleting the plugin removes its settings, the key and every post's stored SEO.