シナプスの技術部、システム開発課の小園です。
Trelloのボードの公開範囲を公開にすると、Googleの検索結果に表示されるという騒動がどうして起きたのか調べた結果、robots.txt(Robots Exclusion Standard)について勉強になったので、共有したいと思います。
運営元による今回の騒動についての案内ページです。 www.atlassian.com
当初、Trelloのボードの公開範囲を公開に設定しただけでなぜGoogleの検索結果に表示されるようになるのか判りませんでした。
普段でもファイルを共有したいと思った時に、ストレージサービス(GoogleDrive、OneDrive、Dropboxなど)で公開URLを作成する事はよくある事です。
ですが、それだけではGoogleの検索結果に表示される事はありません。
なぜならば、Googleはその作成されたURLを知る方法が無いためです。
先に、結論から書くと、Trelloはボードの公開範囲を公開に設定するときに、そのボードのURLをrobots.txt(Sitemaps)に載せていました。
そのため、Googleの検索結果に表示されていました。
Robots Exclusion Standard とは
Wikipedia Robots Exclusion Standard のページには、次のように書かれています。
クローラやボットがウェブサイト全体またはその一部を走査することを防ぐ規約である。ロボット排除規約、robots.txt プロトコルとも呼ばれる。
ウェブサイトの所有者がボットに対して読んでほしく無い場所を設定する規約です。
拘束力は無く、あくまでボット側が協力することが前提となっています。
具体的には、ウェブサイトの階層のルートに robots.txt というテキストファイルを置き、その中に読んでほしくない場所を指定します。
robots.txt の仕様
仕様は次のページに書かれています。
サンプルは、次のようになります。
User-agent: * Disallow: /cgi-bin/ Disallow: /images/ Sitemap: https://www.synapse.jp/sitemap.xml
あらゆるボットが2つのディレクトリ(cgi-bin, images)配下を見ないよう指定されています。
サイトのサイトマップは、https://www.synapse.jp/sitemap.xml が指定されています。
サイトマップというのは、ウェブサイトの所有者がサーチエンジンに、サイト内でクロールすべきURLを教えるためにあります。
Sitemap とは
Wikipedia Sitemap のページには、次のように記載されています。
Sitemaps(サイトマップ)標準は、ウェブマスターがサーチエンジンに、サイト内でクロールすべきURLを教えるための方式を規定するものである。サイトマップはサーチエンジンへのURL追加規約であり、URL排除規約であるrobots.txtを補完するものである。
具体的には、XMLファイルとして用意します。
URLと最終更新日時、更新頻度、サイト内での重要度といった情報を付加します。
Sitemapsに対応したサーチエンジンでは、この情報を使って、サイトのクロールをより効率的に行えます。
サンプルとしては、次のようになります。
<?xml version="1.0" encoding="utf-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> <url> <loc>https://www.synapse.jp/</loc> <lastmod>2017-12-05T10:36:40+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> </urlset>
項目中の、URL(loc)は必須。最終更新日時(lastmod)、更新頻度(changefreq)、サイト内での重要度(priority)は任意です。
Trelloのrobots.txtを見てみよう
Trelloのrobots.txtのURLは https://trello.com/robots.txt になります。
中身はこのようになっています。
# Allow everything User-agent: * Disallow: /search? Disallow: /reset? Disallow: /confirm? Disallow: /confirmDelete? Disallow: /forgot$ Disallow: /statement/ Disallow: /boardinvited/ Disallow: /organizationinvited/ Disallow: /associate/ Disallow: /not-supported.html Disallow: /static/ Disallow: /1/ Allow: / Sitemap: https://trello.com/sitemap-index.xml.gz
見ないように指定された幾つかのディレクトリとサイトマップの指定がある事がわかります。
TrelloのSitemapを見てみよう
Sitemap(https://trello.com/sitemap-index.xml.gz)の中身はこのようになっています。
ファイルはgzip圧縮されており、展開した内容です。(途中省略しています。)
<?xml version="1.0" encoding="UTF-8"?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap><loc>https://trello.com/sitemap-2021-04-08-03-05-03-templates-n1.xml.gz</loc></sitemap> <sitemap><loc>https://trello.com/sitemap-2021-04-08-03-05-03-boards-n1.xml.gz</loc></sitemap> <sitemap><loc>https://trello.com/sitemap-2021-04-08-03-05-03-boards-n2.xml.gz</loc></sitemap> 途中省略... <sitemap><loc>https://trello.com/sitemap-2021-04-08-03-05-03-meta-n1.xml.gz</loc></sitemap> </sitemapindex>
この中の、https://trello.com/sitemap-2021-04-08-03-05-03-boards-n1.xml.gz の中身を確認してみました。
(とても長いので、先頭5行のみです。)
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url><loc>https://trello.com/b/gAn0s0LQ/new-ideas</loc></url> <url><loc>https://trello.com/b/grNaTX2n/tipe-1</loc></url> <url><loc>https://trello.com/b/eyejwjjK/s-t-a-r-s-s-t-r-i-p-e-s</loc></url>
公開に設定されたボードのURLが記載されているように見受けられます。
ボードを公開して確認してみよう
実際にTrelloのボードを作成して公開してみました。
作成し、公開したボードのURLは、https://trello.com/b/ljnSH2LJ/example になります。
4月8日に公開設定にしてみました。 が、4月13日時点ではまだSitemapに反映されていませんでした。
Googleの検索結果に出てくるURLはSitemapに含まれているので、いずれ反映されるのではないかと思っています。
まとめ
今回の、この騒動は提供側と利用者の考え方の違いのように思います。
提供側(Trello)は、公開に設定されたボードは、出来るだけ広く公開して世界中の人に見てもらえるようにしよう。
利用者は、ボードを公開する事でログイン無しで見れるようにしたい。でもURLをインターネットに公開している訳ではない。
という考え方の違いによるものと思います。
どちらの考えが正しいという事は無いと思いますが、提供側の意図は利用者に伝わりにくいように感じました。