インデックス登録されましたが、サイトマップに送信していません
Google Search Consoleのカバレッジで緑色の有効(インデックスに登録されている)になっているものの、「インデックス登録されましたが、サイトマップに送信していません」という詳細情報が気になりました。
クリックしてみると「例」としてURL一覧が表示されます。
そのURLをさらにクリックすると、UTF-8でエンコードされたURLが表示されます。
送信しているXMLサイトマップもUTF-8でエンコードをしていますし、URLの正規化も済んでいるのになぜ?
じっくりと見比べてみると、XMLサイトマップのURLはスラッシュが「%2F」にパーセントエンコーディングされているのに対して、Googleでは「/」のままです。
サイトマップを出力しているphpソースを見てみると、PATH_INFOをrawurlencodeでエンコードしています。
rawurlencodeはRFC3986にもとづいて「-_.~」とアルファベット以外をすべてエンコードするようですので妥当なはずです。
Google独自仕様?と思ったのですが、RFC3986の3.4章に「スラッシュ (“/”) と疑問符 (“?”) の文字はパーセントエンコーディングする事を避けるほうがユーザビリティのためにはよい。」という記述がありました。
スラッシュはパーセントエンコードしないように修正
GoogleもRFCもスラッシュはパーセントエンコードしないと提唱しているのであれば、これに合わせるべきだと思い以下のように修正しました。
$r_page = rawurlencode($page);
$r_page = str_replace('%2F', '/', $r_page);
修正後、XMLサイトマップの出力とGoogle Search ConsoleのURLを比較するとマッチしていましたので、これで解決です。