MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MediaWikiの設定 - IndexNowのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MediaWikiの設定 - IndexNow
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == IndexNowは、Webサイトのページが追加、更新、削除された際に、検索エンジンに即座に通知できるプロトコルである。<br> 通知を受けた検索エンジンは、他の参加検索エンジンと自動的に情報を共有する。<br> <br><br> == APIキーの準備 == ==== キーの要件 ==== IndexNowで使用するAPIキーには、以下の要件がある。<br> * 文字数: 最小8文字、最大128文字 * 使用可能な文字: ** 小文字 (a-z) ** 大文字 (A-Z) ** 数字 (0-9) ** ハイフン (-) * 形式: 16進数の文字列 <br> キーの例を以下に示す。<br> 31a0f3c4c69e46fda555417af06e6db3 <br><br> == キーの生成方法 == IndexNowのAPIキーは、一般的なAPIのように申請して取得するものではなく、自分で生成する仕組みになっている。<br> <br> ==== Linuxコマンドで生成 ==== ===== UUIDベースの生成 ===== # ハイフンを含む形式 (36文字) uuidgen # ハイフンなしの形式 (32文字) uuidgen | tr -d '-' # 小文字に変換 uuidgen | tr -d '-' | tr '[:upper:]' '[:lower:]' <br> # 実行例 uuidgen | tr -d '-' | tr '[:upper:]' '[:lower:]' # 出力例 31a0f3c4c69e46fda555417af06e6db3 <br> ===== OpenSSLを使った生成 (よりランダム) ===== # 16バイト (32文字の16進数) openssl rand -hex 16 # 32バイト (64文字の16進数) openssl rand -hex 32 # 64バイト (128文字の16進数) openssl rand -hex 64 <br> ===== /dev/urandomを使用した生成 ===== # 32文字の16進数 cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 32 | head -n 1 # 64文字の16進数 cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 64 | head -n 1 <br> ==== Windowsで生成 ==== ===== PowerShellを使用 ===== # GUIDベース (ハイフンなし) ([guid]::NewGuid().ToString() -replace '-','').ToLower() # ランダム文字列 (32文字) -join ((48..57) + (97..102) | Get-Random -Count 32 | ForEach-Object {[char]$_}) <br> ===== コマンドプロンプトを使用 ===== rem PowerShellコマンドを実行 powershell -Command "([guid]::NewGuid().ToString() -replace '-','').ToLower()" <br> ==== オンラインツールで生成 ==== 以下のようなオンラインツールを使用することもできる。<br> * https://www.uuidgenerator.net/ * https://randomkeygen.com/ * https://passwordsgenerator.net/ <br> <u>ただし、セキュリティを考慮する場合は、ローカルで生成することを推奨する。</u><br> <br> ==== プログラミング言語で生成 ==== ===== Python ===== <syntaxhighlight lang="python"> import uuid import secrets # UUIDベース key1 = uuid.uuid4().hex print(key1) # secretsモジュール使用 (より安全) key2 = secrets.token_hex(32) print(key2) </syntaxhighlight> <br> ===== PHP ===== <syntaxhighlight lang="php"> <?php // 32文字の16進数 $key = bin2hex(random_bytes(16)); echo $key; // またはMD5ベース $key = md5(uniqid(rand(), true)); echo $key; ?> </syntaxhighlight> <br> ===== JavaScript (Node.js) ===== <syntaxhighlight lang="javascript"> const crypto = require('crypto'); // 32文字の16進数 const key = crypto.randomBytes(16).toString('hex'); console.log(key); // 64文字の16進数 const key2 = crypto.randomBytes(32).toString('hex'); console.log(key2); </syntaxhighlight> <br><br> == キーファイルの作成と配置 == ==== ステップ1 : キーを生成 ==== # 例: OpenSSLで32文字のキーを生成 KEY=$(openssl rand -hex 16) echo "生成されたキー: $KEY" <br> # 出力例 生成されたキー: 31a0f3c4c69e46fda555417af06e6db3 <br> ==== ステップ2 : キーファイルを作成 ==== ===== Linuxの場合 ===== # キーを変数に保存 KEY="31a0f3c4c69e46fda555417af06e6db3" # キーファイルを作成 echo "$KEY" > "${KEY}.txt" # 確認 cat "${KEY}.txt" <br> または、手動でファイルを作成する。<br> vi 31a0f3c4c69e46fda555417af06e6db3.txt <br> # ファイル内容 31a0f3c4c69e46fda555417af06e6db3 <br> ===== Windowsの場合 ===== # PowerShellで作成 $key = "31a0f3c4c69e46fda555417af06e6db3" $key | Out-File -FilePath "$key.txt" -Encoding UTF8 -NoNewline <br> ==== ステップ3 : ファイルをウェブサーバにアップロード ==== ===== 方法1 : SCPでアップロード ===== scp 31a0f3c4c69e46fda555417af06e6db3.txt <ユーザ名>@<IPアドレスまたはドメイン名>:/var/www/html/ <br> ===== 方法2 : FTPクライアントを使用 ===== FileZilla、WinSCP等でWebサイトのルートディレクトリにアップロードする。<br> <br> ===== 方法C: サーバ上で直接作成 ===== # サーバにSSH接続 ssh <ユーザ名>@<IPアドレスまたはドメイン名> # Webサイトのルートディレクトリに移動 cd /var/www/html # キーファイルを作成 echo "31a0f3c4c69e46fda555417af06e6db3" > 31a0f3c4c69e46fda555417af06e6db3.txt # パーミッションを設定 chmod 644 31a0f3c4c69e46fda555417af06e6db3.txt <br> ==== ステップ4 : ファイルの配置場所を確認 ==== Webサイトのルートディレクトリは、以下のような場所が一般的である。<br> <br> * Apache2 *: /var/www/html/ *: /var/www/example.com/public_html/ *: /usr/local/apache2/htdocs/ *: <br> * Nginx *: /usr/share/nginx/html/ *: /var/www/html/ *: /var/www/example.com/ *: <br> * 共用サーバ (cPanel等) *: ~/public_html/ *: ~/www/ *: ~/htdocs/ <br> ==== ステップ 5 : アクセス確認 ==== ブラウザまたはcurlコマンドで確認する。<br> # curlで確認 curl https://www.example.com/31a0f3c4c69e46fda555417af06e6db3.txt # 期待される出力 31a0f3c4c69e46fda555417af06e6db3 <br> Webブラウザで確認する。<br> https://www.example.com/31a0f3c4c69e46fda555417af06e6db3.txt <br> ==== 実装例 (シェルスクリプト) ==== <syntaxhighlight lang="sh"> #!/bin/bash # 設定 WEB_ROOT="/var/www/html" DOMAIN="www.example.com" # キーを生成 KEY=$(openssl rand -hex 16) echo "生成されたキー: $KEY" # キーファイルを作成 echo "$KEY" > "${WEB_ROOT}/${KEY}.txt" # パーミッション設定 chmod 644 "${WEB_ROOT}/${KEY}.txt" # 確認 echo "" echo "キーファイルが作成されました:" echo "ファイルパス: ${WEB_ROOT}/${KEY}.txt" echo "アクセスURL: https://${DOMAIN}/${KEY}.txt" echo "" echo "確認コマンド:" echo "curl https://${DOMAIN}/${KEY}.txt" echo "" echo "このキーを使ってIndexNowにURLを送信できます:" echo "curl \"https://api.indexnow.org/indexnow?url=https://${DOMAIN}/page.html&key=${KEY}\"" </syntaxhighlight> <br><br> ==== キー生成時の注意事項 ==== # キーの保存 #: 生成したキーは必ず安全な場所に保存する #: パスワード管理ツール等に記録することを推奨 # UTF-8エンコード #: キーファイルは必ずUTF-8エンコードで保存する #: BOM (Byte Order Mark)なしで保存する # 改行コード #: ファイル内にキーのみを記述し、余分な改行を入れない #: Windowsで作成する場合、改行コードに注意する # ファイルパーミッション #: 読み取り可能にする必要がある (644推奨) #: 実行権限は不要 # HTTPS #: HTTPSでアクセス可能にすることを推奨 #: HTTPでも動作するが、セキュリティ上HTTPSが望ましい <br><br> == 所有権の確認 == URLを送信する前に、サイトの所有権を証明する必要がある。<br> 所有権の確認方法として、以下に示す2つの方法がある。<br> <br> ==== オプション1 : ルートディレクトリに配置 (推奨) ==== # テキストファイルを作成する。(UTF-8エンコード) # ファイル名を <code>{あなたのキー}.txt</code> にする #: 例: 31a0f3c4c69e46fda555417af06e6db3.txt # ファイル内にキーのみを記述する。 # Webサイトのルートディレクトリに配置する。 #: 例: https://www.example.com/31a0f3c4c69e46fda555417af06e6db3.txt <br> ==== オプション2 : 任意の場所に配置 ==== サイト内の任意の場所にキーファイルを配置することが可能である。<br> ただし、キーファイルの場所より下層のURLのみ送信可能である。<br> <br> また、送信時において、<code>keyLocation</code> パラメータで場所を指定する必要がある。<br> <br> 以下の例では、http://example.com/catalog/key12457EDd.txt に配置している。<br> * 送信可能なURL: ** http://example.com/catalog/show?item=23 ** http://example.com/catalog/show?item=233&user=3453 * 送信不可能なURL: ** http://example.com/image/show?item=23 ** http://example.com/image/show?item=233&user=3453 <br><br> == URLの送信方法 == ==== 単一URLの送信 ==== ===== HTTPリクエスト形式 ===== https://<検索エンジン>/indexnow?url=<変更されたURL>&key=<あなたのキー> # 例: https://api.indexnow.org/indexnow?url=https://www.example.com/product.html&key=31a0f3c4c69e46fda555417af06e6db3 <br> ===== 送信方法 ===== 以下の方法でURLを送信できる。<br> * ブラウザのアドレスバーに直接入力 * <code>curl</code>コマンド: *: curl "https://api.indexnow.org/indexnow?url=https://www.example.com/product.html&key=31a0f3c4c69e46fda555417af06e6db3" * <code>wget</code>コマンド * プログラムから送信 <br> ===== オプション2を使用する場合 ===== https://api.indexnow.org/indexnow?url=https://www.example.com/product.html&key=31a0f3c4c69e46fda555417af06e6db3&keyLocation=https://www.example.com/mykey.txt <br> ==== 複数URLの一括送信 ==== 最大10,000個のURLを一度に送信できる。<br> <br> ===== JSON形式でPOSTリクエスト ===== POST /indexnow HTTP/1.1 Content-Type: application/json; charset=utf-8 Host: api.indexnow.org { "host": "www.example.com", "key": "31a0f3c4c69e46fda555417af06e6db3", "urlList": [ "https://www.example.com/url1", "https://www.example.com/folder/url2", "https://www.example.com/url3" ] } <br> ===== curlコマンドの例 ===== curl -X POST https://api.indexnow.org/indexnow \ -H "Content-Type: application/json" \ -d '{ "host": "www.example.com", "key": "31a0f3c4c69e46fda555417af06e6db3", "urlList": [ "https://www.example.com/page1", "https://www.example.com/page2" ] }' <br> ===== オプション2を使用する場合 ===== { "host": "www.example.com", "key": "31a0f3c4c69e46fda555417af06e6db3", "keyLocation": "https://www.example.com/mykey.txt", "urlList": [ "https://www.example.com/url1", "https://www.example.com/url2" ] } <br> ===== 複数のURLを送信する例 ===== まず、サイトマップから送信するためのURLリストを作成する。<br> <syntaxhighlight lang="sh"> #!/usr/bin/env sh SITEMAP_URL="https://www.example.com/sitemap.xml" # サイトマップをダウンロードしてURLを抽出 curl -s "$SITEMAP_URL" | grep -oP '<loc>\K[^<]+' > urllist.txt echo "URLリストを urllist.txt に保存しました" wc -l urllist.txt </syntaxhighlight> <br> 次に、IndexNowペイロードファイルを作成する。<br> <syntaxhighlight lang="sh"> #!/usr/bin/env sh # IndexNow設定 API_KEY="<APIキー>" HOST="<ドメイン名>" KEY_LOCATION="https://${HOST}/${API_KEY}.txt" URL_FILE="urllist.txt" OUTPUT_FILE="indexnow_payload.json" # URLファイルの存在確認 if [ ! -f "$URL_FILE" ]; then echo "エラー: URLファイルが見つかりません: $URL_FILE" exit 1 fi # JSONファイルを作成 echo "IndexNow ペイロード作成" cat > "$OUTPUT_FILE" <<EOF { "host": "${HOST}", "key": "${API_KEY}", "keyLocation": "${KEY_LOCATION}", "urlList": [ EOF # URLリストを追加 URLS=$(cat "$URL_FILE" | sed 's/^/ "/;s/$/",/' | sed '$ s/,$//') echo "$URLS" >> "$OUTPUT_FILE" # JSONを閉じる cat >> "$OUTPUT_FILE" <<EOF ] } EOF # URLの数をカウント URL_COUNT=$(cat "$URL_FILE" | wc -l) echo "ペイロード作成完了" echo "統計情報:" echo " URL数: $URL_COUNT" echo " ファイルサイズ: $(du -h "$OUTPUT_FILE" | cut -f1)" </syntaxhighlight> <br> 最後に、IndexNowにペイロードを送信する。<br> curl -X POST "https://api.indexnow.org/indexnow" \ -H "Content-Type: application/json; charset=utf-8" \ -d @indexnow_payload.json <br><br> == レスポンスコード == <center> {| class="wikitable" | style="background-color:#fefefe;" |- ! style="background-color:#66CCFF;" | HTTPコード ! style="background-color:#66CCFF;" | レスポンス ! style="background-color:#66CCFF;" | 説明 |- | 200 || OK || URL送信成功 |- | 202 || Accepted || URL受信完了。キー検証待ち |- | 400 || Bad Request || 無効な形式 |- | 403 || Forbidden || キーが無効 (キーファイルが見つからない、またはファイル内にキーがない) |- | 422 || Unprocessable Entity || URLがホストに属していない、またはキーがスキーマと一致しない |- | 429 || Too Many Requests || リクエストが多すぎる (スパムの可能性) |} </center> <br> <u>※注意</u><br> <u>HTTP 200は検索エンジンがURLを受信したことを示すだけで、インデックスされることを保証するものではない。</u><br> <br><br> == 主要な検索エンジンのエンドポイント == 主要な検索エンジンのIndexNowエンドポイントを以下に示す。<br> <br> <center> {| class="wikitable" |+ IndexNowプロトコルに参加している主要な検索エンジン |- ! 検索エンジン !! 対応状況 !! エンドポイント |- | Bing || 完全対応 || https://www.bing.com/indexnow<br>https://api.indexnow.org/indexnow |- | Yandex || 完全対応 || https://yandex.com/indexnow |- | Seznam.cz || 完全対応 || https://search.seznam.cz/indexnow |- | Naver || 完全対応 || - |- | Google || 未対応 || - |} </center> <br><br> == 推奨される設定 == # 自動化 #: コンテンツの追加・更新・削除時に自動的にURLを送信する。 # タイミング #: 変更後、できるだけ早く送信する。 # 頻度制限 #: スパムと見なされないよう、適切な間隔で送信する。 # HTTPとHTTPSの混在 #: 同一リクエストで両方のURLを送信可能 # URLエンコード #: URLは適切にエンコードし、RFC-3986標準に準拠させる。 <br><br> == 実装例 == ==== Python ==== <syntaxhighlight lang="python"> import requests import json # 単一URL送信 def submit_single_url(url, key): endpoint = "https://api.indexnow.org/indexnow" params = { "url": url, "key": key } response = requests.get(endpoint, params=params) return response.status_code # 複数URL送信 def submit_multiple_urls(host, key, url_list): endpoint = "https://api.indexnow.org/indexnow" data = { "host": host, "key": key, "urlList": url_list } headers = {"Content-Type": "application/json; charset=utf-8"} response = requests.post(endpoint, json=data, headers=headers) return response.status_code # 使用例 key = "31a0f3c4c69e46fda555417af06e6db3" status = submit_single_url("https://www.example.com/page1", key) print(f"Status: {status}") </syntaxhighlight> <br><br> == トラブルシューティング == ==== 403エラーが発生する場合 ==== 以下の項目を確認する必要がある。<br> * キーファイルが正しい場所に配置されているか確認 * ファイル名が <code>{キー}.txt</code> の形式になっているか確認 * ファイル内にキーが正しく記述されているか確認 * UTF-8エンコードで保存されているか確認 <br> ==== 429エラーが発生する場合 ==== * 送信頻度が高すぎる可能性がある。 * 一定時間待ってから再送信する。 <br><br> == 参加検索エンジンの要件 == IndexNowプロトコルを採用する検索エンジンは、以下の要件に同意する必要がある。<br> * 送信されたURLは、参加している全ての検索エンジンと自動的に共有される。 * 少なくとも1つの市場で顕著な存在感を持つか、検索市場と密接に関連している必要がある。 * URL送信数に大きく貢献する必要がある。 <br><br> == 関連リンク == * [https://www.indexnow.org/ IndexNow公式サイト] * [https://www.indexnow.org/documentation IndexNowドキュメント] * [https://www.indexnow.org/faq IndexNow FAQ] <br><br> __FORCETOC__ [[カテゴリ:MochiuWikiの設定]]
MediaWikiの設定 - IndexNow
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse