| |

Privacy-First Related Posts for WordPress: Keeping Data on Your Own Server

Related posts plugins need to know what’s in your content to recommend anything useful. Some do that analysis on your server. Others send your content to an external service and get recommendations back.

That difference matters more than it looks. Once content (and potentially visitor data) leave your server, you’re relying on someone else’s infrastructure, someone else’s retention policy, and someone else’s definition of what counts as necessary processing. For sites in regulated spaces such as healthcare, finance, legal, or education, that complicates GDPR documentation: you now have to account for a data flow you don’t control.

How sites handle related posts

There’s no single right way to add related posts to a WordPress site, and not all approaches touch visitor data the same way.

Manual linking is the most straightforward. You edit each post and add links to related content yourself. It gives you complete control, requires no data processing, and needs no additional plugins. The drawback is time: maintaining those links across a large archive isn’t practical.

Popular posts plugins, such as Top 10Opens in a new window, surface content based on view counts or engagement metrics. You can track that data entirely on your own server. Recommendations are driven by popularity rather than topical relevance, which is a different trade-off than privacy.

External recommendation services analyze your content (and potentially visitor behavior) remotely to generate suggestions. They handle the matching automatically and can factor in behavioral signals from across many sites, not just yours. The cost is that your content and visitor data are processed outside your server, which is exactly the dependency worth questioning before you adopt one.

Self-hosted plugins process everything locally using your existing database. Recommendations are generated from your content without external calls, and nothing about a visitor’s session leaves your server. Performance depends on your hosting environment and how well the plugin is configured, not on a third party’s uptime.

This is where Contextual Related Posts fits in

I built Contextual Related PostsOpens in a new window (CRP) over 17 years ago as a self-hosted option that keeps everything on your server. Activate it and related posts appear below your content automatically. No external API calls, no template edits, no shortcodes required unless you want them.

I’ve been maintaining it since 2009. The plugin doesn’t collect personal data or send anything to external services, so it’s GDPR-friendly by default. You’re still responsible for your site’s overall compliance, but there’s one less data flow to document.

How the Algorithm Works

On activation, CRP creates MySQL FULLTEXT indices from your post titles and content. When a post loads, CRP queries those indices, ranks the results, and caches the output, all within your own database. The algorithm documentation covers the ranking logic in more detail.

The flow is:

  1. A post loads
  2. CRP queries the FULLTEXT index
  3. Results are ranked and filtered
  4. The final list is cached

Matching is based on what you’ve published: titles, content, categories, tags, and optional custom fields. Recommendations come from your editorial structure, not from tracking what visitors clicked on other sites.

Getting Up and Running

  1. Install CRP from the WordPress plugin directory
  2. Activate it
  3. Enable automatic insertion under Settings → Related Posts

Related posts appear below content immediately. From there, adjust counts, enable thumbnails, and configure excerpts from the settings screen. A search field on the settings page makes it easy to find a specific option by keyword if you’re not sure which tab it’s under.

For more placement control, use the

shortcode, the Related Posts block in the block editor, or template tags directly in your theme.

If related posts aren’t showing up, the troubleshooting guide covers the most common causes.

Shaping the Output

CRP includes tools to guide recommendations when automated matching isn’t enough, without introducing any tracking.

The post editor metabox gives you per-post control: disable related posts entirely for that post, exclude it from other posts’ related lists, override the matching keyword, exclude specific terms, hand-pick manual related posts, or exclude specific post IDs.

Custom post type support means CRP works with products, portfolio items, documentation, or any registered post type.

When to consider CRP Pro

The free version handles most sites well. CRP Pro is worth considering when your requirements grow, and it keeps the same local-processing model. The free vs. pro comparison lays out the full difference.

Larger archives benefit from dedicated custom tables and enhanced caching that reduce query overhead as post counts climb, all still stored on your own server. Finer relevance control lets you adjust weights for titles, content, and excerpts separately.

Cornerstone posts let you promote key content into the related posts list regardless of contextual relevance, a Pro-only counterpart to the per-post keyword override already available in the free metabox. The Related Posts block and Query Loop block also gain that same keyword override, so you can control matching from the block editor instead of the post editor.

Lazy loading defers rendering related posts until they’re about to enter the viewport, which helps initial page load and plays well with page caching. Honest trade-off: search engines may not index those links, since they’re not in the initial HTML.

WooCommerce integration adds related product support with native styling options, again without sending product or customer data anywhere external.

Start with the free version. Upgrade when the site demands it.

Leave a Reply

Your email address will not be published. Required fields are marked *