このサイトに独自ドメイン rascal2000.jp を導入した。せっかくなので Google 検索にも、最近の AI(Gemini など)にもちゃんと拾ってもらえる状態まで整えた。その作業ログ。
robots.txt と sitemap.xml をアプリに追加title / meta description / 自己参照 canonical を整備ドメインを取得したあと、DNS は Cloudflare(無料プラン)に委任した。レジストラ側のネームサーバーを Cloudflare が指定する2つに差し替えるだけ。
Cloudflare をかませる利点はこのあたり:
SSL/TLS の暗号化モードは Full に設定。http:// で来たアクセスは「Always Use HTTPS」で https:// に 301 させている。
クローラに「このサイトのページ一覧はこれ」と渡すため、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 にも自動で載る。送り直しが要らないので楽。
検索結果に出る見た目はここで決まるので、各ページに手を入れた。
<title>(例:株価・損益トラッカー | rascal's Server)<meta name="description"><link rel="canonical">canonical はテンプレートで現在のパスを埋めるだけにした:
<link rel="canonical" href="https://rascal2000.jp{{ request.path }}">
これで各ページが「自分が正規URL」と宣言でき、パラメータ付きURLなどの重複を避けられる。
ここが今回ちょっとハマったところ。新規ドメインを 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 で学習を拒否し、GPTBot や Google-Extended(=Gemini / Vertex AI が学習・参照に使う制御トークン)などを軒並み Disallow していた。さらに robots.txt の前段で、AIクローラを実際にネットワークレベルで遮断する設定(Block AI bots)も効いていた。
自分はむしろ AI に読んで学習してほしい派なので、
robots.txt 側でも Content-Signal: ... ai-train=yes, ai-input=yes を明示に変更。これで公開 robots.txt は「AI学習歓迎」版になり、GPTBot / Google-Extended / CCBot などのUAで叩いても 200 が返る(403で弾かれない)ことを確認した。Gemini については、検索は Googlebot、AI側の利用は Google-Extended という棲み分けで、その両方を通す形になる。
最後に検索登録。ドメインプロパティで rascal2000.jp を追加し、Cloudflare に確認用の TXT レコードを1つ足すだけで認証完了。
そのあと、
sitemap.xml を送るインデックス反映は数日〜数週間かかるので、しばらくは「ページ」レポートを眺めて待つフェーズ。
ドメインを取って Cloudflare に載せ、robots.txt / sitemap.xml / title / description / canonical を整え、AIクローラを許可して、Google Search Console に登録——という一通りで、「検索にもAIにも積極的に出していく」状態になった。記事を増やせばサイトマップは自動で更新されるので、あとはコンテンツを書くだけ。