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

  1. In the dashboard, add your WordPress site's domain (for example example.com; subdomains such as www.example.com are included) and copy its secret key.
  2. Download headlark-wordpress.zip. In WordPress, go to Plugins → Add New Plugin → Upload Plugin, choose the zip and activate it.
  3. 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

Open WordPress with Headlark

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

TagWhat Headlark does
TitleSets the document title, unless another SEO plugin is active.
Meta description, Open Graph, X cardsAdds them when the page doesn't already have them.
Preview imageA 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 dataAdds JSON-LD types the page doesn't already have.
CanonicalOnly when the page has none. WordPress prints one on posts and pages, so usually never.
RobotsNever touched.
Image alt textFills 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.