File viewer

draft_12082026_0118.json

/app/data/llm/draft/house730/draft_12082026_0118.json

{
  "summary_points": [
    "Traffic is down 30.6% while rankings hold. 546 of 1,000 sampled keywords rank 1–3, and 3,024 AI citations exist, but AI answers absorb clicks; no link campaign addresses this.",
    "The AI citation lead is real but only where crawlers are allowed. PerplexityBot gets 200 and earns 500 citations; GPTBot, ClaudeBot, OAI-SearchBot, Google-Extended, and Bytespider get 403, and those platforms show zero or marginal citation presence.",
    "Money pages earn citations with zero links. /rent/t1b8/ is the top cited page (9 responses) but has 0 referring domains; AI citation eligibility is driven by on-page relevance, not authority.",
    "On-site plumbing failures are the bottleneck, not content. 179 /cdn/ asset URLs return indexable 200s, 13 broken backlinks contain %0D%0A line-break bugs, and the crawl cannot verify cited-page templates because 91% of sampled URLs were /cdn/ assets."
  ],
  "method_notes": "Data combines Ahrefs (organic traffic, keywords, citations, backlinks), Brand Radar (AI impressions, share of voice, cited pages), live crawls (JS-rendered, UA-based from a single datacenter IP), and live bot checks (same IP, different UAs). This covers competitive positioning, citation presence, and access controls, but cannot replace server logs or WAF config. The bot check is a single UA-based probe from one datacenter IP; it does not prove production blocking of any specific crawler. Citations are from Ahrefs and Brand Radar; platform attribution is from Brand Radar. Contradictions between crawl 200s and probe 403s are resolved by different IPs/UAs — the crawl passed, the probe was WAF-flagged. Prior vendor's backlink-heavy approach is contradicted by rankings stability and citation success without links.",
  "featured_finding": {
    "headline": "The AI citation gap is a crawler access gap — and the fix is a WAF rule change.",
    "narrative": "The live checks reveal a perfect platform-by-platform split: PerplexityBot returns 200 on /robots.txt; GPTBot, ClaudeBot, OAI-SearchBot, Google-Extended, and Bytespider all return 403 from the edge (sub-120ms, never reaching origin). The citation data mirrors this exactly. Perplexity, with confirmed access, holds 500 citations (Ahrefs) despite negligible HK market share. ChatGPT appears in neither dataset. Gemini is marginal at 1,260 impressions versus Google AI Overviews' 14,190 — and AI Overviews runs on Googlebot, whose production access is proven by that dominance. Brand Radar shows house730 is the #1 cited domain with a 2.1x lead over centanet (19% cited-page share vs 9%). This is co-occurrence — alternative explanations exist (Brand Radar may not track ChatGPT; Gemini adoption is low in HK) — but the pattern is consistent with a causal mechanism: a platform can only cite pages its crawler can fetch. The two access-confirmed crawlers correspond to the two platforms with meaningful citation presence; the blocked bots correspond to the gaps. This is the single most important finding because house730 is already winning on access-confirmed platforms. If any production AI crawler is being 403'd, every other GEO, content, and internal-linking initiative is irrelevant to that platform. The fix is a WAF rule change, verifiable in week 1, that opens platforms competitors haven't locked up yet.",
    "proof_points": [
      "PerplexityBot 200 on /robots.txt; 500 citations in Ahrefs.",
      "GPTBot, ClaudeBot, OAI-SearchBot, Google-Extended 403 from probe IP; zero ChatGPT presence, marginal Gemini impressions (1,260 vs 14,190).",
      "Google AI Overviews dominates (14,190 of 17,710 AI impressions) — proof Googlebot reaches origin fine.",
      "Brand Radar: house730 is #1 cited domain, 19% cited-page share, 2.1x lead over centanet."
    ],
    "why_it_wins": "This is the most actionable finding because it requires only a WAF rule change to unlock citations on platforms where house730 is invisible. It cross-references live checks, Ahrefs, and Brand Radar, and it directly explains why citations are missing on specific platforms. The fix is low-effort, verifiable immediately, and has no downside. Every other finding (onsite, internal linking, backlinks) is secondary until AI crawler access is confirmed."
  },
  "key_findings": [
    {
      "finding": "Traffic decline is an AI-answer story, not a rankings story.",
      "evidence": "Ahrefs: organic traffic down 30.6% over 36 months, rankings hold (546/1,000 sampled keywords positions 1–3, 420 in 4–10), search volume down only 15.5%, keyword count flat. Brand Radar: 80% of AI impression volume (14,190/17,710) in Google AI Overviews on 100% transactional Cantonese queries. Ahrefs: 3,024 AI citations, '租屋' (11,000 vol) surfaces as ai_overview result.",
      "implication": "AI answers are absorbing clicks from high-intent queries. No link campaign addresses this. The only lever is citation presence — which is already proven, but only on platform-confirmed crawlers."
    },
    {
      "finding": "Money pages earn citations with zero links, proving AI citation is driven by on-page relevance, not authority.",
      "evidence": "Ahrefs: /rent/t1b8/ has 0 referring domains. Brand Radar: /rent/t1b8/ is the #1 own-cited page with 9 responses. Ahrefs: 3,024 AI citations total. Brand Radar: 19% cited-page share, 2.1x lead over centanet.",
      "implication": "A backlink-first strategy is misdirected. The site already wins citations without links. The bottleneck is access, not authority."
    },
    {
      "finding": "On-site architecture is creating indexation and crawl waste.",
      "evidence": "Crawl: 179 /cdn/ asset URLs returning indexable 200s with no evidence of noindex or robots exclusion. Ahrefs: 13 broken backlinks contain %0D%0A line-break characters — a systematic URL formatting bug. Brand Radar: 91% of sampled crawl URLs were /cdn/ assets, leaving cited-page templates unverified.",
      "implication": "The site is leaking crawl budget to non-content assets, and a URL bug is breaking backlinks from DR-75 HK media. Fixing these plumbing issues is faster and higher impact than any link acquisition."
    },
    {
      "finding": "The citation moat is shallow and vulnerable to competitors carving out specific clusters.",
      "evidence": "Brand Radar: 169 cited pages, 188 responses, 1.1 average responses per page, top page only 9/217. Competitors 28hse, spacious, runhotel, weave-living are cited on short-term rental queries where house730 has no depth. Ahrefs: no internal linking digest available; equity flow from estate pages to category pages is unmodelled.",
      "implication": "house730 has breadth but not depth in citations. Competitors are winning specific clusters. Depth (more responses per page) and coverage of underserved clusters are the next growth lever after access."
    }
  ],
  "risk_areas": [
    {
      "issue": "179 /cdn/ asset URLs indexed as non-indexable content may confuse Google's understanding of page purpose.",
      "priority": "P1",
      "effort": "LOW",
      "impact": "MEDIUM",
      "detail": "Crawl found 179 URLs under /cdn/ returning 200 with no noindex tag. These are likely JS/CSS/image assets being indexed as pages. Confirm via headers check, then block via robots.txt or X-Robots-Tag noindex."
    },
    {
      "issue": "13 broken backlinks from DR-75 HK media due to URL formatting bug (%0D%0A line breaks).",
      "priority": "P1",
      "effort": "LOW",
      "impact": "MEDIUM",
      "detail": "Ahrefs: 13 broken backlinks contain %0D%0A characters. These are likely from a CMS or migration issue. Fix the URL template and reclaim the links."
    },
    {
      "issue": "873K spam backlinks (Jan 2026 wave, avg DR 6.7, 'TELEGRAM @happygrannypies' anchors) may be ignored by Google but represent a disavow risk.",
      "priority": "P2",
      "effort": "MEDIUM",
      "impact": "LOW",
      "detail": "Ahrefs: 873K spam backlinks in a wave from January 2026. No visible ranking impact, but should be monitored and disavowed if Google flags them."
    },
    {
      "issue": "No internal linking digest available; equity flow from estate pages to category pages is unmodelled.",
      "priority": "P2",
      "effort": "MEDIUM",
      "impact": "LOW",
      "detail": "Brand Radar and Ahrefs show estate pages hoard links (122 RDs, 74 visits) while money pages have 0 RDs. Internal linking could redistribute equity, but data is missing."
    }
  ],
  "bot_management": {
    "observed_facts": [
      "Live check from a single datacenter IP: PerplexityBot returned 200 on /robots.txt. GPTBot, ClaudeBot, OAI-SearchBot, Google-Extended, and Bytespider returned 403 (sub-120ms, WAF-level). Browser on same IP returned 403. Crawl from a different IP returned 200.",
      "PerplexityBot also 404'd on /services/ and /contact/ — not confirmed elsewhere."
    ],
    "seo_risks": [
      "Any production AI crawler that is blocked cannot fetch pages, making those pages invisible to that AI platform. This directly reduces citation potential on platforms like ChatGPT, Claude, and Gemini."
    ],
    "geo_hypothesis": {
      "claim": "The 403 on certain AI crawler UAs from the probe IP is suggestive of a WAF rule that blocks these crawlers in production, which would explain the absence of citations on those platforms.",
      "supporting": [
        "PerplexityBot (200) corresponds to 500 citations (Ahrefs).",
        "GPTBot, ClaudeBot, OAI-SearchBot (403) correspond to zero ChatGPT/Bing/Claude citations in Brand Radar.",
        "Google-Extended (403) is used by Gemini, which has only 1,260 impressions vs 14,190 for Google AI Overviews (which runs on Googlebot, not Google-Extended)."
      ],
      "prevents_calling_fact": [
        "The test is UA-based from a single datacenter IP — production crawlers are typically whitelisted, so 403 from a probe IP does not prove production blocking.",
        "Brand Radar may not track ChatGPT citations; Gemini adoption in HK is low.",
        "Confounded by the fact that the same IP also blocked a browser request."
      ],
      "definitive_check": "Server logs from the origin showing which user agents and IPs are actually being served 200 vs 403. Alternatively, WAF configuration audit."
    },
    "recommendations": [
      "Request access to server logs or WAF config to confirm which AI crawler UAs are blocked in production.",
      "If confirmed blocked, whitelist GPTBot, ClaudeBot, OAI-SearchBot, and Google-Extended in the WAF.",
      "After whitelisting, monitor Brand Radar and Ahrefs citations for new appearances on those platforms within 2–4 weeks."
    ],
    "method_caveat": "This test uses a single datacenter IP and a set of UA strings. It does not simulate production crawler behavior. Verified crawlers (Googlebot, Bingbot) are typically whitelisted, so the 403s observed may not apply to production crawls. The finding is suggestive, not proven."
  },
  "narrative_arc": [
    "Your organic traffic is down 30.6% not because you're losing rankings, but because AI answers are intercepting clicks. Your 3,024 citations prove you're already in the AI ecosystem — but only where crawlers are allowed.",
    "The live checks reveal a perfect split: PerplexityBot gets in and earns 500 citations; five other AI crawlers get 403'd and their platforms show zero or marginal presence. The fix is not a content or link campaign — it's a WAF rule.",
    "Your on-site architecture is the other bottleneck: 179 asset pages are being indexed, 13 broken backlinks have a URL bug, and we can't even check the health of your cited pages because the crawl sampled /cdn/ assets. These are plumbing fixes, not editorial investments.",
    "The answer is on-site and technical, not off-site and link-based. The data shows you're already winning on access-confirmed platforms. Unlock the rest, fix the crawl waste, and you'll turn the AI citation moat into a defensible lead."
  ],
  "recommendations": [
    {
      "action": "Audit AI crawler access in production via server logs or WAF configuration.",
      "rationale": "Live checks show 403 for five major AI crawlers from a probe IP. If production blocking is confirmed, whitelisting them unlocks citations on ChatGPT, Claude, Gemini, and Bing. This is the highest-impact, lowest-effort action.",
      "validation": "After whitelisting, monitor Brand Radar and Ahrefs for new citations on those platforms within 2–4 weeks."
    },
    {
      "action": "Recrawl the site excluding /cdn/ paths, and apply noindex or robots.txt blocks to all /cdn/ URLs.",
      "rationale": "179 /cdn/ assets are being indexed as pages, wasting crawl budget and potentially confusing page understanding. This is a quick fix.",
      "validation": "Confirm in GSC that /cdn/ URLs are excluded from index and crawl report shows reduced waste."
    },
    {
      "action": "Fix the %0D%0A line-break bug in URL templates and reclaim the 13 broken backlinks.",
      "rationale": "These broken links come from DR-75 HK media. Fixing the URL formatting will restore link equity and improve citation potential.",
      "validation": "Ahrefs broken backlinks report should show fewer broken links after fix."
    },
    {
      "action": "Pull internal linking digest and create a plan to route equity from estate pages to /buy/ and /rent/ category pages.",
      "rationale": "Ahrefs shows estate pages have 122 RDs but only 74 visits, while money pages have 0 RDs. Internal linking can redistribute this equity.",
      "validation": "Ahrefs site explorer internal linking report after implementation."
    }
  ],
  "hypotheses": [
    {
      "claim": "Production AI crawlers (GPTBot, ClaudeBot, OAI-SearchBot, Google-Extended) are blocked by the WAF, causing the citation gap on those platforms.",
      "status": "suggestive",
      "how_to_verify": "Server logs or WAF configuration audit."
    },
    {
      "claim": "The 179 /cdn/ asset URLs are accidentally indexable and may be diluting page quality signals.",
      "status": "suggestive",
      "how_to_verify": "Check HTTP headers and X-Robots-Tag for those URLs; verify in GSC Performance report."
    },
    {
      "claim": "The %0D%0A line-break bug in broken backlinks originates from a CMS migration or URL template error.",
      "status": "suggestive",
      "how_to_verify": "Audit CMS URL generation code and compare with Ahrefs broken backlinks list."
    }
  ]
}