# instinct: スクレイパー0件で「旧ドメインがHTTP 200」でも移転を否定するな。トップHTMLのリンク先ドメインを見て移転先を特定する

スクレイパーが0件取得の時、旧ドメインが `curl` で **HTTP 200 を返しても移転していないとは限らない**。旧ドメインが**ランディングページ化**し、本体は新ドメインに移っていることがある。

## 切り分け手順
1. 旧ドメインのトップHTMLを取得し、**リンク先ドメインの傾向**を見る:
```
curl -s -A "Mozilla/5.0..." https://old-domain.com/ | grep -oE 'href="https?://[^/"]*' | sort | uniq -c | sort -rn
```
→ 大半が `new-domain.net` を指していれば**移転確定**(旧は誘導ページ)
2. 新ドメインが素のcurlで403でも諦めない。**ブラウザUA + Referer + Accept-Language** を付けると200になることが多い(bot対策が緩い)
3. 一覧ページが静的HTMLに作品リンクを持たない(0件)なら**WordPress AJAX等の動的ロード**を疑う:
- HTMLに `admin-ajax.php` `wp-json` `action=` `nonce=` があればAJAX駆動
- `admin-ajax.php?action=&...` を直接叩くとHTML断片で作品リンクが返る(実例: rawkuma `action=advanced_search`)
- これは素のhttpx/requestsで取れる=Scrapling/Playwright不要のことが多い

## rawkuma実例(#256・PR #328)
- rawkuma.com(200)はランディング・本体はrawkuma.net・静的libraryは0件
- `rawkuma.net/wp-admin/admin-ajax.php?action=advanced_search&orderby=popular&order=desc&the_page=1` + ブラウザUA+Referer で **0件→72件**
- SiteConfigに `extra_headers`(default_factory=dict・後方互換)を新設しReferer/X-Requested-With付与・`no_proxy=True`(直結で200)

## 関連
- [[instinct-scraper-zero-items-site-block]] — 0件は「サイト側ブロック」のこともある(こちらは修正不可で無効化が正解)。本能とセットで切り分け
- [[instinct-senavi-url-pattern-change]] — リンク検出あり0件は抽出段の取りこぼし
- Issueの「移転先URLに変えれば直る」を鵜呑みにせず、トップHTMLのリンク先ドメインと動的ロードの有無を実機で裏取りする

---
(migrated from local memory/instinct_scraper_domain_migration_landing_page.md)