Trending Topics & Blog Gap Analysis
Finding rankable opportunities in a niche — high-volume, low-difficulty keywords filtered against what your blog already covers.
Trending Topics
The trending endpoint finds the high-leverage opportunities in a niche — keywords with real demand but low enough difficulty that they are winnable. Give it up to five seed keywords that cover your niche, set a minimum monthly volume (default 100) and a maximum keyword difficulty (default 70), and it pulls suggestions across every seed, unions them, deduplicates, and filters down to the rankable ones. The output is a short list of "these are the keywords I would go after first" ranked by volume. This is the right tool when you are starting content strategy from scratch and need a starting slate of topics.
Finding winnable opportunities across a niche
Multiple seeds combined into a single opportunity list.
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.
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.