← 記事一覧に戻る
2026-06-21

独自ドメイン rascal2000.jp を Cloudflare で公開して検索・AIに載せるまで

このサイトに独自ドメイン rascal2000.jp を導入した。せっかくなので Google 検索にも、最近の AI(Gemini など)にもちゃんと拾ってもらえる状態まで整えた。その作業ログ。

やったこと(概要)

  1. 独自ドメインを取得
  2. Cloudflare(無料プラン)経由で公開 — 無料SSL・CDN・オリジンIPの秘匿
  3. robots.txtsitemap.xml をアプリに追加
  4. 各ページに title / meta description / 自己参照 canonical を整備
  5. AIクローラを許可(既定のブロックを解除)
  6. Google Search Console に登録してサイトマップ送信

1. ドメイン取得と Cloudflare

ドメインを取得したあと、DNS は Cloudflare(無料プラン)に委任した。レジストラ側のネームサーバーを Cloudflare が指定する2つに差し替えるだけ。

Cloudflare をかませる利点はこのあたり:

SSL/TLS の暗号化モードは Full に設定。http:// で来たアクセスは「Always Use HTTPS」で https:// に 301 させている。

2. robots.txt と sitemap.xml をアプリで返す

クローラに「このサイトのページ一覧はこれ」と渡すため、Flask に2つのルートを足した。

CANONICAL_HOST = "https://rascal2000.jp"

@app.route('/robots.txt')
def robots_txt():
    body = (
        "User-agent: *\n"
        "Content-Signal: search=yes, ai-train=yes, ai-input=yes\n"
        "Allow: /\n"
        "Disallow: /admin\n"
        f"Sitemap: {CANONICAL_HOST}/sitemap.xml\n"
    )
    return Response(body, mimetype='text/plain')

@app.route('/sitemap.xml')
def sitemap_xml():
    pages = ["/", "/about", "/notes", "/stocks", "/server",
             "/analytics", "/random", "/grapher", "/circuit", "/keiba"]
    urls = [(CANONICAL_HOST + p, None) for p in pages]
    for file_path in glob.glob(os.path.join(BASE_DIR, "posts", "*.md")):
        slug = os.path.basename(file_path)[:-3]
        urls.append((CANONICAL_HOST + "/notes/" + slug, None))
    # ... <urlset> を組み立てて application/xml で返す

ポイントは、サイトマップが posts/*.md動的に列挙していること。記事を1本追加すれば、この sitemap.xml にも自動で載る。送り直しが要らないので楽。

3. タイトル・説明文・canonical

検索結果に出る見た目はここで決まるので、各ページに手を入れた。

canonical はテンプレートで現在のパスを埋めるだけにした:

<link rel="canonical" href="https://rascal2000.jp{{ request.path }}">

これで各ページが「自分が正規URL」と宣言でき、パラメータ付きURLなどの重複を避けられる。

4. AIクローラを許可する

ここが今回ちょっとハマったところ。新規ドメインを Cloudflare に追加すると、既定でAIボットがブロックされるrobots.txt に勝手に次のような記述が差し込まれていた。

User-agent: *
Content-Signal: search=yes,ai-train=no

User-agent: GPTBot
Disallow: /
User-agent: Google-Extended
Disallow: /
...

ai-train=no で学習を拒否し、GPTBotGoogle-Extended(=Gemini / Vertex AI が学習・参照に使う制御トークン)などを軒並み Disallow していた。さらに robots.txt の前段で、AIクローラを実際にネットワークレベルで遮断する設定(Block AI bots)も効いていた。

自分はむしろ AI に読んで学習してほしい派なので、

に変更。これで公開 robots.txt は「AI学習歓迎」版になり、GPTBot / Google-Extended / CCBot などのUAで叩いても 200 が返る(403で弾かれない)ことを確認した。Gemini については、検索は Googlebot、AI側の利用は Google-Extended という棲み分けで、その両方を通す形になる。

5. Google Search Console

最後に検索登録。ドメインプロパティrascal2000.jp を追加し、Cloudflare に確認用の TXT レコードを1つ足すだけで認証完了。

そのあと、

  1. サイトマップ送信sitemap.xml を送る
  2. URL検査でトップと主要ページのインデックス登録をリクエスト

インデックス反映は数日〜数週間かかるので、しばらくは「ページ」レポートを眺めて待つフェーズ。

まとめ

ドメインを取って Cloudflare に載せ、robots.txt / sitemap.xml / title / description / canonical を整え、AIクローラを許可して、Google Search Console に登録——という一通りで、「検索にもAIにも積極的に出していく」状態になった。記事を増やせばサイトマップは自動で更新されるので、あとはコンテンツを書くだけ。