What to fix, what to write

The weekly loop with data behind every step: non-branded changes, topics, briefs, scored drafts, links, and the timeline.

Embed
Preview of the card
<a href="https://seolyticize.com/docs/fix-and-write"><img src="https://seolyticize.com/docs/_api/public/orgs/71cb2b7a-a719-4003-b3ea-6321dc1db8ab/spaces/3bf2dbf7-3faa-473c-ba3b-30588f5f8de4/pages/8b233899-72df-4f48-ab3d-3132501d3ccf/social-card.svg?v=3e7ae33eec8b" alt="What to fix, what to write" width="600" height="315"></a>

Two questions every week: what should we fix or improve on the site, and what should we write next, shaped to rank. Each step below is one call; the human approves.

1. What moved

get_search_changes {clientId, brand: "non_branded"}             → new, lost, gainers, losers (28 days vs the 28 before)
get_search_changes {clientId, dimension: "page"}                → the same by page
get_brand_split {clientId, interval: "week"}                    → is non-branded growing
get_query_page_swaps {clientId}                                 → queries now answered by a different page
get_search_timeline {clientId}                                  → traffic beside deploys, publishes and Google updates
get_serp_volatility {clientId}                                  → is it us, or is the whole results page moving

Set the brand terms once with update_client_brief {clientId, brandTerms: [...]}; until then the client's name and domain are used. country: "esp" segments any of these by market.

2. What to fix

compare_crawls {clientId}                → new issues and fixed ones since the last crawl
get_issue_templates {clientId}           → each issue by URL template: 62 pages, one fix
get_parameter_report {clientId}          → ?sort= and ?filter= copies wasting the crawl → set_crawl_settings stripParams
get_internal_link_graph {clientId}       → orphans, pages deeper than three clicks, internal PageRank
suggest_internal_links {clientId}        → for pages in striking distance: the sentence to link from, and the anchor
get_anchor_overlap {clientId}            → one anchor pointing at two pages
get_rendering_report {clientId}          → content that exists only after JavaScript (turn on with set_crawl_settings render)
get_broken_backlinks {clientId}          → links already earned, to pages that 404, with where to redirect
get_audit_performance {clientId}         → Lighthouse on each large template, and field Core Web Vitals
suggest_meta_tags {clientId}             → titles and descriptions for every missing, duplicate or overlong tag in the crawl
simulate_serp_snippet {clientId, url}    → where Google will cut the title and description, in pixels
plan_redirect_map {clientId, oldCrawlId} → before a migration: a 301 for each old address, as CSV, .htaccess or nginx

3. What to write

get_topic_map {clientId, seed?}                      → clusters with no page (write), one page, or several (merge)
cluster_keywords {clientId, keywords}                → which keywords belong on one page
get_demand_matrix {clientId, pattern, slots}         → which template pages deserve to exist
get_competitor_new_pages {clientId}                  → what competitors published, by section
get_best_pages_by_links {clientId, domain: rival}    → what earns links in the niche
get_ai_overview_citations {clientId}                 → who the AI Overview cites for our keywords
research_topic {clientId, seed}                      → subtopics, questions and the headlines ranking now (paid)
get_personal_keyword_difficulty {clientId, keywords} → how hard each keyword is for this site
forecast_keyword_traffic {clientId, keywords}        → what the set is worth at positions 1, 3, 5 and 10

4. Write it to rank

build_content_brief {clientId, keyword, save: true}   → intent, format, length, outline, must-cover terms, questions, links, competitor gaps
draft_article {clientId, keyword}                     → a first draft from the brief (paid), or the writer drafts
score_content {clientId, keyword, markdown}           → 0–100 with the fix list; repeat until at par
rewrite_section {clientId, keyword, section, draft}   → a weak section rewritten to cover what the score found missing (paid)
(a person reads it)
(publish)
submit_indexnow {clientId, urls}                      → or the deploy hook does it
add_annotation {clientId, on, kind: "publish", title} → so next month's chart says why

5. Measure it in sign-ups

get_conversions {clientId, channel: "search"}   → conversions by landing page, with the queries that bring them
list_conversion_goals {clientId}                → what the site sends

Anything the tools above do not answer: query_data over the same stored data, and export_data for a notebook or BigQuery — see Query and export.

What it costs

Most of this is free: Search Console, the crawl, the link graph, analytics and the timeline are stored data. Results pages, keyword volumes and backlinks are paid lookups on the client's DataForSEO account — and served free when anyone on Seolyticize bought the same one recently. Every paid call returns spend: what it cost, what was reused, and what is left of the client's month.

Updated