Ghost Update

Description

Ghost Update is a simple but powerful plugin that makes your WordPress site look alive again by systematically updating post/page timestamps and alerting Google Search to come check it out.

This is perfect for older blogs, abandoned content, or static websites that haven’t changed in a while and are now suffering in search rankings.

Ghost Update offers:

  • ✅ Automatic post/page timestamp refresh (without touching content)
  • ✅ Optional random or sequential update order
  • ✅ Force update + recrawl button
  • ✅ Manual Google JSON auth upload & secure storage
  • ✅ Enforced 10-minute cooldown between Google Indexing API pings (for safety)
  • ✅ Simple log viewer + log clearing
  • ✅ Cron toggle — enable/disable auto mode
  • ✅ No product updates, no WooCommerce, no content edits

Cron Behavior

GhostUpdate uses WordPress‘ built-in «pseudo-cron» system, which means scheduled tasks only run when someone visits your site. This includes both automatic post updates and Google Search Console pings.

Key Points

🔁 WordPress cron is visitor-based
No visitors = no cron runs. It only triggers when a page is loaded by a real user or bot.

🕓 Missed runs = delayed schedules
Cron tasks won’t fire in the background unless triggered by activity. This can cause delays in updates on low-traffic sites.

🧠 One run = one reschedule
A cron job must fire before WordPress will schedule the next one. They don’t “queue up” in advance.

Options for Low-Traffic Sites

✅ Keep the plugin’s settings page open in your browser
This keeps cron alive by generating regular page loads.

✅ Use the “Force Update + Recrawl Now” button
Instant update and ping, no waiting or cooldown.

Reminder

This behavior is core to how WordPress works. GhostUpdate doesn’t change or override it — it works with it.

External Services

This plugin connects to multiple endpoints from Google’s Indexing API to notify Google that a post or page has been updated. This functionality is required to trigger recrawls in Google’s search index.

What data is sent

The plugin sends the URL of the updated post or page to the following Google API endpoints. No personal data is transmitted.

When data is sent

Data is sent only when a post/page is programmatically republished by the plugin or when triggered manually by the admin.

External domains contacted

  • https://oauth2.googleapis.com/token — used to obtain an OAuth 2.0 token with a service account
  • https://indexing.googleapis.com/v3/urlNotifications:publish — used to send the updated URL to Google for recrawling
  • https://www.googleapis.com/auth/indexing — used as the OAuth scope to limit access to Indexing API only

Service Provider

By using this plugin, you agree to Google’s API terms and policies. The authentication is performed using a Google Cloud service account which you manually upload to the plugin.

Notes

  • Posts/pages skipped due to cooldown are still updated, just not pinged.
  • Google will still crawl updated content eventually even if not directly pinged.

License

GPL v2 — use, modify, share freely.

Screenshots

  • Ghost Update Settings Panel

Installation

  1. Upload the plugin folder to /wp-content/plugins/ or install via the Plugins > Add New screen
  2. Activate the plugin through the ‚Plugins‘ menu
  3. Visit Settings Ghost Update to configure:

    • Upload your Google .json service account file
    • Enable automatic updating
    • Set your desired interval (in seconds)
    • Exclude posts/pages (optional)
    • View logs of all update and ping activity

FAQ

What does this plugin actually do?

Ghost Update refreshes your post/page post_date and post_modified fields on a schedule (e.g. every 8 hours). Optionally, it will also notify Google using the Indexing API to request a recrawl.

Does it change content?

No. It does not alter content, metadata, taxonomy, SEO fields, or anything else. It only updates timestamps and optionally triggers a Google ping.

What’s the cooldown logic for Google API pings?

Ghost Update enforces 1 request every 10 minutes. This is to protect your quota and avoid abuse detection.

If an update is triggered while in cooldown, the post is still refreshed — but the Google ping is skipped and logged as:

🔒 Cooldown active. Skipping GSC for post ID 1234.

Can I control which posts/pages get updated?

Yes — exclude any number of posts or pages via ID in the plugin settings.

How do I authenticate with Google?

  1. Create a Google Cloud project
  2. Enable the Indexing API
  3. Create a service account, and download the .json key
  4. Upload it in the plugin settings
  5. Add the client_email from the .json file as an Owner in your Google Search Console property

How do I add the service account as an Owner in GSC?

  1. Open your .json file and find:
    «client_email»: «your-service-account@project.iam.gserviceaccount.com»
  2. Go to Google Search Console Settings Users and Permissions
  3. Click Add User and paste the service account email
  4. Set permission to Owner

Google gave me an HTML file for verification — what do I do?

You don’t need it.

Just uploaded securely via the plugin settings.
this will add the file to «your-site»/uploads/ghostupdate

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Ghost Update” is open source software. The following people have contributed to this plugin.

Contributors

Translate “Ghost Update” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.0

  • Initial release
  • Scheduled updates with interval + randomization
  • Google Indexing API ping integration
  • Rate-limited GSC API calls (1 per 10 min)
  • Service account JSON file support
  • Logging system with viewer + cleaner
  • Admin UI with force button and exclusion filter
  • Enable/Disable toggle for plugin scheduler
  • Works with pages and posts (not WooCommerce)