Skip to content
Sarudo

Trending Topics & Blog Gap Analysis

Finding rankable opportunities in a niche — high-volume, low-difficulty keywords filtered against what your blog already covers.

trendingblog gapcontent gapopportunitynichesitemap

Blog Gap Analysis

Blog gap builds on trending by adding the single most useful filter: remove anything you already cover. Give it seed keywords, volume and difficulty thresholds, and optionally your blog URL (it falls back to the blog URL stored in your Sarudo settings, or to sarudo.com/blog as a last resort). It pulls trending keywords for your seeds, fetches your blog's sitemap.xml, extracts the slug tokens from every post, and removes candidate keywords whose tokens overlap an existing post above a similarity threshold (default 0.55). What you get back is a list of genuinely new content opportunities — keywords with demand, within reach of ranking, that you have not written about.

The coverage check is best-effort. A fresh domain with zero posts returns existing_posts_count=0 and every trending keyword is considered uncovered (as it should be). A domain with no sitemap.xml falls back the same way. You can manually supply a blog_url to force the check against a specific sub-path.

How Coverage Detection Works

The similarity threshold uses token overlap, not semantic embedding. The keyword "ai employee vs ai assistant" tokenizes to {ai, employee, vs, assistant}, and an existing post at /blog/ai-employee-vs-assistant tokenizes to {ai, employee, vs, assistant} — a 4/4 overlap, well above 0.55, so the keyword is marked covered and dropped. A keyword like "ai employee pricing" tokenizes to {ai, employee, pricing}; against the same existing post, overlap is 2/3 = 0.67, still above 0.55, so also considered covered. If you want the gap filter looser (keep more candidates), lower the similarity threshold toward 0.4. If you want it stricter (drop more candidates), raise toward 0.8.

Running blog gap analysis

Find opportunities your blog does not cover.

You say:
Run blog gap analysis across "ai employee", "agentic ai", and "business ai" — min volume 100, max difficulty 60. My blog is at myblog.com.
Sarudo responds:
Checked your sitemap at myblog.com/sitemap.xml — found 23 existing blog posts. Of 87 trending candidate keywords above volume 100 and below difficulty 60, 31 were already covered by existing post slugs and got filtered out. 56 genuine gap keywords remain. Top 10: [list]. These are real content opportunities — none of them overlap your existing coverage.

Feeding the Content Calendar Pipeline

Blog gap analysis is the first stage of the Content Calendar Pipeline. Every month on the 20th the pipeline calls `/seo/blog_gap` with your configured seeds and thresholds, takes the top 30 gap keywords, enriches every row with an LLM-generated title and content idea, drops all 30 into a fresh Google Sheet, and emails you for approval. You do not have to run blog gap manually every month — it happens on cron. But you can run it ad-hoc any time you want to check the current landscape or experiment with different seeds before committing them to your monthly calendar.