YubiKeyのOATHをCLIで扱う

はじめに

前回の投稿「Yubico Authenticator 6」ではYubiKey 5OATH 機能をYubico 社の認証アプリYubico Authenticator を使って操作しましたが、今回はYubiKey ManagerCLIツール (ykmanコマンド) を使って操作してみたのでその解説をします。

ykman コマンドの引数にTwitter のQR コードの値 “otpath://totp/Twitter:@RodentGiant?secret=xxxxx&issuer=Twitter” を指定してYubiKey にアカウントを登録して認証コードを発行する、というようなことの解説です。

扱うコマンドはCLI ツールのOATH コマンドで、Yubico 社の公式サイトにマニュアルが掲載されています。

YubiKey のOATH 機能について

前回の投稿「Yubico Authenticator 6」で解説していたので省略。

YubiKey Manager について

Yubico 社が提供するYubiKey Manager には、ウィンドウ操作のGUI ツールと、コマンドライン操作のCLI ツール の2種類のツールがあります。
今回の投稿はコマンドライン操作のCLI ツールを使った解説になります。

GUI ツールについては、過去の投稿「MacにYubiKey Managerをインストール」で解説しているので興味がある方はご参照ください。
なお、GUI ツールはYubiKey のOATH 機能を操作する機能を備えていないです。

環境について

今回の解説で使う環境です。

  • OS:macOS Monterey
  • YubiKey Manager CLI (ver 5.0.0)
  • YubiKey 5 NFC

インストール(CLIツール)

Yubico 社の公式サイトからCLI ツールのパッケージファイルをダウンロードしてインストールすることができますが、GUI ツールにはCLI ツールも同梱されているので、GUI ツールをインストールしてCLI ツールを使うことも可能です。

  • YubiKey Manager (CLIツール)のパッケージファイル
    • インストールすると自動でパス指定される
    • CLI ツールのバージョンが最新(ver. 5.0.0)
  • YubiKey Manager (GUIツール)のパッケージファイル
    • CLI ツールが同梱されている(パス指定が必要)
    • CLI ツールのバージョンが最新ではない(ver. 4.0.7)

ただ、2022年12月23日時点ではありますが、GUI ツールに同梱されているCLI ツールは最新のver.5.0.0 ではないので、最新を使いたい場合はCLI ツールを単体でインストールする必要があります。

もし、GUI ツールと最新のCLI ツールの両方を使いたい場合は、GUI ツールに同梱されているCLI ツールはパス指定が自動で行われないので、両方とも単純にインストールするだけで最新のCLI ツールが使える状態になります。

なお、macOS ユーザーの場合は、Homebrew を使ってCLI ツールをインストールすることもできます。こちらは最新のバージョン(ver. 5.0.0)になっていました。

各リンク先を貼っておきます。

各種環境のインストール方法が掲載されているYuboco 社のページが参考になりそうなのでリンクを貼っておきます。

Homebrew を使ってインストール

今回、Homebrew を使ってCLIツールのみをインストールします。

ターミナルで下記のコマンドを実行してインストールします。

brew install ykman

インストール後にykman コマンドに既にパスが通っていることを確認します。バージョンは5.0.0 です。

% which ykman
/opt/homebrew/bin/ykman

% ykman -v
YubiKey Manager (ykman) version: 5.0.0

OATH 機能を使う(アカウントの登録〜認証コードの生成)

CLI ツールを使ったアカウントの登録は、2要素認証を登録するサービス側が表示するQR コードの情報を使って行います。

例として、Twitter とGoogle で表示されたQR コードのページとQR コードの情報(QR コードをスキャンして読み取ったURI)を載せておきます。

Twitter

Twitter > QRコード
QRコード
Twitter > shared secret
shared secret
otpauth://totp/Twitter:@RodentGiant?secret=ABCDEFGHIJKLMNOP&issuer=Twitter

“Can’t scan the QR code?” をクリックするとshared secret が表示されたページが表示されました。

Google

Google > QRコード
QRコード
Google > shared secret
shared secret
otpauth://totp/Google:[email protected]?secret=abcdefghijklmnopqrstuvwxyz012345&issuer=Google

“スキャンできない場合” をクリックするとshared secret が表示されたページが表示されました。

アカウントの登録(URI を指定する)

QR コードをスキャンして読み取ったURI をそのまま指定して登録します。

ykman oath accounts uri "otpauth://totp/Twitter:@RodentGiant?secret=ABCDEFGHIJKLMNOP&issuer=Twitter"

認証コードの発行にYubiKey のタッチを要求するようにする場合は-t オプションを指定します。

ykman oath accounts uri -t "otpauth://totp/Twitter:@RodentGiant?secret=ABCDEFGHIJKLMNOP&issuer=Twitter"

アカウントの登録(shared secret を指定する)

shared secret を指定して登録します。

Twitter とGoogle では前述のQR コードを表示するページからリンクできるページでshared secret を確認することができます。
また、URI のクエリパラメータsecret の値がshared secret なので、URI で確認することもできます。

URI に含まれる要素を分解してshared secret 以外のオプションを指定するので、オプションの意味が分かりやすいように、ハイフン2つのオプションも併記しておきます。

ykman oath accounts add -i Twitter -o TOTP @RodentGiant ABCDEFGHIJKLMNOP
ykman oath accounts add --issuer Twitter --oath-type TOTP @RodentGiant ABCDEFGHIJKLMNOP

認証コードの発行にYubiKey のタッチを要求するようにする場合は-t オプションを指定します

ykman oath accounts add -i Twitter -o TOTP -t @RodentGiant ABCDEFGHIJKLMNOP

アカウント情報の一覧を表示

YubiKey に登録されているアカウントの情報を一覧で表示します。

% ykman oath accounts list -H -o -P
% ykman oath accounts list --show-hidden --oath-type --period
Twitter:@RodentGiant, TOTP, 30

-H オプションは非表示アカウントを表示するためのもののようですが、そもそも非表示アカウントが何か調べても分かりませんでした。-H オプションは指定しなくても結果は変わらなかったので、指定する必要ないのかもしれません。

認証コードの生成

アカウントを絞り込む条件を指定しないでコマンドを実行します。

% ykman oath accounts code
Google:RodentGiant    [Requires Touch]
Twitter:@RodentGiant            001542

アカウントが2つ登録されている場合、上記のように出力されます。

出力されるアカウントが2つ以上ある場合、アカウントの登録時に-t オプションを指定したアカウントは[Requires Touch] と表示されます。

-tオプションを指定したアカウントの認証コードの発行

アカウント登録時に-t オプションを指定したアカウントの認証コードを発行するためには、1つのアカウントのみ出力されるようにする必要があります。
YubiKey に複数のアカウントが登録されている場合は、アカウントを絞り込む条件(部分一致)を指定します。

% ykman oath accounts code Google:RodentGiant
Touch your YubiKey...
Google:RodentGiant  302862

2行目でYubiKey のタッチが要求され、タッチすると3行目の抽出したアカウントのアカウント名と認証コードが表示されます。

認証コードのみ出力する

-s オプションを指定して認証コードのみ出力することもできます。
この場合も、1つのアカウントのみ出力されるようにする必要があります。

% ykman oath accounts code -s Twitter:@RodentGiant
% ykman oath accounts code --single Twitter:@RodentGiant
001542

OATH 機能を使う(アカウントの管理)

アカウントの名前変更

% ykman oath accounts rename Twitter:@RodentGiant "Twitter:RenamedName"
Rename account: Twitter:@RodentGiant ? [y/N]: y
Renamed Twitter:@RodentGiant to Twitter:RenamedName.

アカウントにissuer を設定していた場合、変更後の名前の左に”:”(セミコロン)を付けてissuer を指定しないとissuer が削除されます。
上記例では”Twitter” がissuer 、”RenamedName” が変更後のアカウント名です。

アカウントの削除

% ykman oath accounts delete Twitter:@RodentGiant
Delete account: Twitter:@RodentGiant ? [y/N]: y
Deleted Twitter:@RodentGiant.

サービス側の2要素認証の設定も削除する必要があるので注意が必要です。
削除する順番を(1)サービス側の2要素認証の設定を削除、(2)YubiKey 側のアカウントを削除、とすればログイン時にサービス側から2要素認証の認証コードの入力を求められるけれど発行できないという状況は回避できるでしょう。

OATH 機能を使う(パスワード関連)

前回の投稿「Yubico Authenticator 6」のあとがき「YubiKey の紛失や窃取によるアカウント情報の漏洩」で少し解説していますが、YubiKey のOATH 機能にパスワードを設定することができます。
YubiKey を不正に入手した第三者への、YubiKey に登録されているアカウント情報の漏洩と、認証コードの発行を防ぐことができるので、安全のためにはパスワードは設定しておいた方がよさそうです。

なお、これまでの例示したコマンドはパスワードが設定されていない例になります。
パスワードが設定されていると、コマンドを実行する度にパスワードの入力が求められるようになります
アカウント情報の一覧を表示するコマンドの場合、下記のようになります。

% ykman oath accounts list -H -o -P
Enter the password:

-p オプションでコマンドにパスワードの文字列を付加することで、「Enter the password:」を表示しないで結果を得ることができますが、ターミナルに実行したコマンドの記録が残るのは望ましくないと思うので個人的には使わないようにしています。

% ykman oath accounts list -H -o -P -p 123456
Twitter:@RodentGiant, TOTP, 30

パスワードの設定(初期登録・変更)

YubiKey のOATH 機能は、初期状態ではパスワードが設定されていないです。
パスワードを初期登録する場合と、初期登録後に変更する場合で使うコマンドは同じです。

% ykman oath access change
Enter the new password:
Repeat for confirmation:
Password updated.

パスワードの削除

YubiKey のOATH 機能に設定されているパスワードを削除します。削除するとコマンドの実行時にパスワードの入力を求められなくなります。

% ykman oath access change -c
Enter the current password:
Password cleared from YubiKey.

パソコンにパスワードを記憶

パスワードをパソコンに記憶させておくことにより、コマンドを実行する度にパスワードの入力が求められないようにすることができます。
裏で記憶しておいたパスワードが自動入力される感じです。

% ykman oath access remember
Enter the password:
Password remembered.

一度、このコマンドを実行しておけば、同じパソコンであればパソコンを再起動しても記憶された状態が保たれます。
仕組みとしては、~/.ykman/oath.json というファイルに記憶されるようです。

パソコンに記憶したパスワードを削除

パソコンに記憶されているパスワードを削除します。削除した場合、YubiKey のOATH 機能のパスワードが設定されたままだと、コマンドの実行時にパスワードの入力が求められるようになります。

% ykman oath access forget
Password forgotten.

YubiKey のOATH 機能のパスワードの変更や削除をした場合、パソコンに記憶したパスワードは使えなくなるので、パソコンに新しいパスワードを記憶するか、このコマンドでパソコンに記憶されているパスワードを削除します。

あとがき

YubiKey のOATH 機能のパスワード設定について

  • YubiKey 紛失時の備えとして、パスワードは設定しておいた方がよさそう
  • コマンドを入力する度にパスワードを入力するのは面倒なので、パソコンに記憶させる機能は使った方がよい
  • 設定したパスワードを失念すると、パスワードの変更も削除もできなくなる
    • YubiKey に登録したアカウントの認証コードが発行できなくなる
    • YubiKey のOATH をリセットするしかない
    • パスワードはパスワードマネージャーに登録しておいた方がよい

Yubico Authenticator を使えば良いのでは?

YubiKey のOATH 機能は、Yubico Authenticator であればGUI で操作できるので、一般的な用途ではCLI ツールを使う必要がなさそう。
ざっと見た感じ、CLI ツールでできることはすべてYubico Authenticator でできると思われる。

サーバ側で認証コードを発行する仕組みを作るのにCLI ツールを使うにしても、YubiKey 5 のOATH 機能を使う場合、YubiKey 5 のOATH に登録できるOATH-TOTP の上限が32 なので、用途としては向いていなそう。

参照

Google Messages for Web が便利

テレワークに便利なものをご紹介します。

SMSは基本的にSIM カードを挿入したスマホで使うものですが、Android スマホのユーザーであればスマホのメッセージアプリとパソコンのブラウザで開いたGoogle Messages for Web というGoogle が提供するサービスを連携させることで、パソコンのブラウザ上でSMS メッセージを操作することができるようになります。

ちなみに日本語のサービス名はPC版メッセージ のようなので、以降PC版メッセージと表記します。

Google Messages

対象者

  • Android スマホのユーザー
  • SMS はGoogle のメッセージアプリを使っている
  • Android スマホで使っているSMS メッセージをパソコンでも扱えるようにしたい

手順

1. パソコンのブラウザでPC 版メッセージのQRコードを表示

パソコンのブラウザでPC版メッセージのページを開きQR コードを表示します。
※ 今回はChrome を使った解説になります

Google Messages for Web

2. Android スマホのメッセージアプリでQRコードをスキャン

  1. Android スマホのメッセージアプリを開く
  2. 左上の≡ボタンから表示されるメニューの[デバイスをペア設定] をタップ
  3. [QRコードスキャナ] をタップし、パソコンのQR コードをスキャンする
  4. [QRコードスキャナ] の下に連携したブラウザの情報が表示される

3. パソコンのブラウザにAndroid スマホと同じメッセージが表示される

パソコンに戻ると、Android スマホに表示されていたメッセージの相手先が左に表示され、同期された感じになっています。

Google Messages for Web > 連携完了
Google Messages for Web > タブを閉じても設定を保持する

左上に「パソコンの情報を保持しますか?」という確認メッセージが表示されています。
[はい] をクリックしてタブを閉じても設定が保持されるようにします。

Google Messages for Web > チャット形式

左に表示されている相手先を選択すると、右にチャット形式でメッセージが表示されます。(左側の吹き出しが相手、右側の吹き出しが自分)
メッセージのやりとりができる相手だと、下にメッセージの入力フォームが表示されます。

Google Messages for Web > チャットを開始

[チャットを開始] をクリックすると”新しい会話” という状態になり、宛先に電話番号などを入力してメッセージを送信することができます。

宛先の指定は電話番号だけでなく、名前とメールアドレスを入力して指定することもできます。

下の”よく使う連絡先”には、SMS で使っている自分の電話番号をアカウント情報として登録しているGoogle アカウントの連絡帳の情報が表示されるようです。
宛先に名前を入力すると、この連絡帳を検索して候補が表示されるようになっています。

あとがき

宛先のメールアドレス入力について

MMS(携帯のキャリアメール)のことのようです。
試しにメールアドレスを入力してみると送信ボタンに”MMS” と表示されていたのでたぶんそうです。
※ MMS を送る相手が見つからなかったので実際に送信して試すことはできませんでした

Google Messages for Web > MMS

実はGmail のアドレスに送れたりしないか?と試してみましたが、”送信できませんでした” と表示されました。

パソコンだけでなくiPhone でも使える

ブラウザで利用するサービスなので、iPhone のブラウザ(Safari)でも使えるか試してみたところ、パソコンのブラウザと同じように使うことができました。
※ 環境はiOS 15.7.1

iPhone のブラウザにQR コードを表示した状態で[ホーム画面に追加] でホームにアイコンを追加してから、追加したアイコンをタップして表示されたQR コードをAndroid スマホのメッセージアプリでスキャンして登録すると、あたかもメッセージアプリかのように使うことができるようになります。

Google Messages for Web (iPhone)
(iPhone) 右下の”Messages” がPC版メッセージ

ちなみに、QRコードをスキャンした後のPC版メッセージのページを[ホーム画面に追加] でホームにアイコンを追加すると、そのアイコンをタップしてもQR コードのページが表示されてしまうので、前述の手順でやる必要があるようです。

複数の端末(パソコンとiPhoneなど)と同期できる

パソコン(Chrome)とiPhone(Safari)の2つの端末と連携すると、スマホ(Android)のメッセージアプリの”ペア設定済みのデバイス” は下記のようになっていました。

Google Messages for Web > 複数端末

両方ともブラウザを見ると同じ状態のSMS メッセージが表示されていました。

2要素認証のコードをパソコンでも見れるのはセキュアではないのでは?

ウェブサービスの2要素認証を有効にしてSMS でコードを受け取るようにしている場合、パソコンと連携しておけばパソコンのブラウザ上でSMS の受信したコードをコピー&ペーストで入力できるので、パソコンから手と目をスマホに移す必要がなくなかなか便利です。

セキュリティの観点からすると、SMS のコードがインターネットとは別経路で通知されることで安全性が担保されていたものが、インターネット経由で転送される状態になるので、安全性が下がることは否めない感じがあります。

気になるようでしたら、ウェブサービスのサポート次第ではありますが、2要素認証をSMS から認証アプリを使う方式に切り替えるのもアリかと思います。

あくまでも利便性向上としての紹介なので、ご利用は自己責任でお願いします。

参考

Pixel 6aへの機種変更

Google のPixel 6a 買いました。

メインで使っているスマホはAndroid なので、Android からAndroid への移行を行います。

Android 同士の移行には、旧スマホのデータをGoogle のクラウド、有線接続、WiFi接続のいずれかを使ってコピーする便利な方法が提供されていますが、不要なものはコピーしたくない、ゼロからセットアップする手順を見たいという理由から、この便利な方法は使わずに新スマホをセットアップすることにしました。

なので、Android 同士の移行をする方法としてあまり参考にならないかもしれませんが、どのような手順があるのかどのような移行の注意点があるのかが後から見て分かるように記録できればと思います。

方針・前提事項

  • Android ユーザが新しいAndroid 端末に移行する手順です
  • Google のクラウド、有線接続、WiFi接続のいずれかを使ってコピーする便利な方法がありますが使わないです
  • 新Android へのアプリのインストールは、パソコンのブラウザ上でGoogle Play のページを開いてアプリを一つ一つ選択して行います(最低限のアプリしかインストールしたくない、スマホよりパソコンの方が効率的に作業できそうということでこの方法になりました)
  • 旧Android に保存されているデータの移行はアプリの移行が完了してから考える

手順

1. Pixel 6a の初回起動

Google の公式サイトを見るとPixel のセットアップは、(1)今までのスマートフォンに保存されているデータからの移行(2)新しいデバイスとしてセットアップの2つの方法があります。
今回は(2)新しいデバイスとしてセットアップの方をやります。

  1. 電源を入れる(電源ボタンを5秒間長押しする)
  2. “Welcome to your Pixel” と表示される
    • “English (United States)” をタップして”日本語” に変更
    • “アシストオプション” はそのまま
    • [始める] をタップ
  3. モバイルネットワークへの接続
    • SIMカードをSIMスロットに挿入する ※挿入すると自動的に次へ
    • “SIMをダウンロードしますか?” はそのまま
  4. Wi-Fi に接続
    • 接続するアクセスポイントをタップしてパスワードを入力
    • アクセスポイントの詳細表示の中身はデフォルトのまま(以下一部抜粋)
      • 従量制:自動的に検出
      • プライバシー:ランダムMACを使用
    • [接続] をタップ
  5. “スマートフォンの設定中…” と表示される ※10秒程度
  6. アプリとデータのコピー
    • [次へ] ではなく、[コピーしない] をタップ
  7. “情報を確認しています…” と表示される ※5秒程度
  8. ログイン:Google アカウントでログインしましょう
    • メールアドレスに自身のGoogle アカウントのアドレスを入力して[次へ] をタップ
    • パスワードを入力して[次へ] をタップ
    • 2段階認証プロセスで使用している方式を使う
      • YubiKey を使っているので、”NFCでセキュリティキーを使用する” を選択してスマホの背面にセキュリティキーを当てる
    • “電話番号を追加しますか?” で[はい、追加します] をタップ
  9. Google 利用規約、プライバシーポリシーのリンクが表示される
    • [同意する] をタップ
  10. “アカウント情報を取得しています…” と表示される ※5秒程度
  11. Google サービス ※許可するものをONにする
    • 位置情報の使用:ON(デフォルト)
    • スキャンの許可:ON(デフォルト)
    • 使用状況データや診断データの送信:ON(デフォルト)
    • [同意する] をタップ
  12. スマートフォンをGoogle One でバックアップ ※以下参考情報
    • Google アカウントの保存容量の15GB アップアップに使う
    • 自動でバックアップ ※充電器とWi-Fiに接続されている時
    • [ONにする] をタップ
  13. PINの設定
    • 数値4桁以上を入力して[次へ] をタップ
    • PIN の再入力
  14. 指紋認証によるロック解除の設定
    • [同意する] をタップ
    • “指紋の登録方法” で[開始] をタップ
    • “指紋認証センターを長押ししてください” で画面に表示される指紋マークに指紋認証に使う指(左手の親指)を押し当てる→振動→押し当てる→振動 を何度か繰り返す
    • “指紋の登録完了” で”別の指紋を登録” をタップ
    • 右手の親指で同じように指紋を登録する
    • [次へ] をタップ
  15. “セットアップを続けますか?” と表示される
    • [中断し、リマインダーを受け取る] ではなく、[続行] をタップ
  16. “Google にハンズフリーで話しかける” と表示される
    • [同意する] ではなく、[スキップ] をタップ
    • ※アシスタントの設定で変更できる
  17. “デバイスのロックを解除しないでアシスタントにアクセス” と表示される
    • [同意する] ではなく、[スキップ] をタップ
    • ※ロック画面でアシスタントの使用を許可するかどうか
  18. “スマートフォンですばやくお支払い” と表示される
    • [次へ] ではなく、[スキップ] をタップ
    • ※Google Pay の設定
  19. “さらに設定を続けますか?” と表示される
    • ※他のアカウント追加, フォントサイズ変更, アプリ追加, 壁紙変更, ロック画面に表示する情報の管理, ディスプレイ常時ON などが続けてできる
    • [いいえ] をタップ
  20. “ヒントやアドバイスを受け取る” と表示される
    • ※Google の製品やサービス等の情報をメールで受け取るかどうかの設定
    • [登録する] ではなく、[スキップ] をタップ(確か既に登録済みのはず)
  21. “スマートフォンでのスワイプ操作” と表示される
    • [スキップ] ではなく、[試してみる] をタップ
      • ホームに戻る →画面を下から上にスワイプ
      • 直前の画面に戻る →画面の左か右から中央にスワイプ
      • アプリを切り替える →画面を下から上にスワイプして長押ししてから指を離す
  22. “設定完了” と表示される
    • “システムナビゲーションの設定” をタップ
      • “ジェスチャーナビゲーション”(デフォルト) と”3ボタンナビゲーション”(画面の切り替えが画面下部のボタンで行う) のどちらかを選択する
    • 上にスワイプするとホームに移動する
Google Pixel 6a 初回起動完了

2. Google アカウントに電話番号を追加の続き

メッセージアプリにメッセージが届いているのでメッセージアプリをタップすると、”Google による電話番号の確認” というメッセージが届いていました。
Pixel の初回起動の#8 で電話番号を追加する選択をしたので、このメッセージが送信されたようです。
ということで、電話番号追加の確認手順を進めます。

  1. “Google による電話番号の確認” というメッセージにhttps://goo.gl/で始まるURLのリンクがあるのでリンクをタップ
  2. Chrome が起動するので[同意する] をタップ
  3. “同期を有効にしますか?” と表示されるので、[いいえ] ではなく[有効にする] をタップ
  4. “Android ヘルプ” の”Androidスマートフォンの電話番号の確認手続きを行う” のページが表示される

このタイミングで、”Pixel のセットアップを完了してください” という通知が表示されました。
この通知をタップすると、Pixel の初回起動の#18 でスキップしたGoogle Pay の設定や、データのコピー、それ以外の設定をすることができましたが、これらは後で必要であればやればよいと思っていたことなのでスキップしました。

3. プリインストールアプリを確認する

16個のアプリをインストールしました” という通知が来ているので、初回起動直後の既にインストールされているアプリを確認しておきます。

全部で34個のアプリのアイコンがありました。

Google Pixel 6a アプリ(1/2)
Google Pixel 6a アプリ(2/2)

4. アプリをインストールする

アプリのインストールは、Playストアのアプリではなく、パソコンのブラウザで開いたGoogle Play のページ上で行います。

  1. パソコンのブラウザでGoogle Play のページを開く
    • Pixel の初回起動の#8 と同じGoogle アカウントでログインする
  2. 右上のアイコンをクリックすると表示されるメニューから「ライブラリとデバイス」をクリック
  3. ライブラリというページが開くので、上のメニューの「デバイス」をクリック
    • 旧Android と新Android が表示されているはずです
    • ここでAndroid のニックネームを変えることができます
  4. 上のメニューの「アプリ」をクリック
    • 旧Android でインストールしていたアプリが表示されます
    • 新Android へのアプリのインストールはこのページでインストールしたいアプリを選択して1つずつインストールする操作を行います
  5. まずは、LINE アプリをインストールするので、LINE のアイコンをクリック
  6. LINE アプリのページが開くので、[他のデバイスへのインストール] をクリック
  7. デバイスの選択ウィンドウが開くので、新Android(今回は”Google Pixel 6a”)を選択して[インストール] をクリック
  8. これで新Android へのLINE アプリのインストールが開始されます

この#4 のアプリ一覧のページでインストールしたいアプリをひとつひとつ選んでインストールする作業をひたすらやります。
面倒ではありますが、これで最低限必要なアプリしかインストールされていない環境にすることができます。

この作業に微妙なコツがあったので手順を記載しておきます。

  1. アプリ一覧でCommand ボタンを押しながらアプリのアイコンをクリックして新しいタブでアプリのページを開く(Macのショートカット)
  2. [他のデバイスへのインストール] をクリック
  3. デバイスを選択して[インストール] をクリック
  4. アプリのページのタブを閉じると、アプリ一覧のタブが同じ場所で表示される

#1 の操作のように新しいタブで開かないと、アプリのページからアプリ一覧のページに戻った時にページの一番上に戻ってしまい、直前のインストールしたアプリの所までスクロールすることになってしまいます。

今回は42個のアプリをインストールしたので、この手順によって作業負荷やかかる時間がそれなりに違ったと思います。

5. アプリの初期設定

どういう順番でアプリの初期設定をするかを考えてみました。

  1. パスワードマネージャ
    • 1Password
  2. 認証アプリ(ワンタイムパスワードを発行するアプリ)
    • Google 認証システム、Twilio Authy Authenticator
  3. 移行にミスるとやり直しが利かなそうなアプリ
    • LINE ※引き継ぎが必要
    • モバイルSuica ※引き継ぎが必要
    • ヨドバシゴールドポイントカード
  4. 認証アプリを使ってワンタイムパスワードを扱うアプリ(2段階認証)
    • Twitter、Facebook、Amazon、etc.
  5. 認証アプリを使わないでワンタイムパスワードを扱うアプリ
    • 三菱UFJ銀行
  6. 上記以外

5-1. 1Password

「サインアップコードを読み取る」というQRコードを使う方法で簡単にできました。

  1. 【旧スマホの1Password アプリ】QRコードを表示
    • アプリを開き、[アカウント] > (自身のアカウント名) > [別のデバイスをセットアップ] > [セットアップコード] を選択してQRコードを表示する
    • パソコンの1Password アプリでもQRコードを表示できます
  2. 【新スマホの1Password アプリ】QRコードをスキャン
    1. アプリを起動し、[セットアップコードを読み取る] をタップしてQRコードをスキャン
    2. パスワードを入力するとサインイン完了(2要素認証を有効にしている場合は2要素目の入力も必要)

新スマホで1Password アプリが使える状態になりました。

5-2. Google 認証システム

登録しているアカウントの移行をQRコードを使って簡単にできました。

  1. 【旧スマホのGoogle 認証システムアプリ】QRコードを表示
    1. アプリを開き、右上のメニューから[アカウントを移行] > [アカウントのエクスポート] をタップ
    2. “アカウントの選択” ページで移行するアカウントのチェックをON にして[次へ] をタップするとQRコードが表示される
  2. 【新スマホのGoogle 認証システムアプリ】QRコードをスキャン
    1. アプリを起動し、[QRコードをスキャン] をタップしてQRコードをスキャンする
  3. (続きがある場合、下記を繰り返す)
    1. 旧スマホのアプリで[次へ] をタップして次のQRコードを表示
    2. 新スマホのアプリでQRコードをスキャン

新スマホのGoogle 認証システムアプリに旧スマホと同じアカウントが表示されました。6桁コードは旧スマホと新スマホで同じ番号が表示されています。

<補足> Google 認証システムに登録しているアカウントの数が多いと、1つのQRコードでは収まらないので複数のQRコードに分けて全てのアカウントを移行できるようになっているようです。ちなみに今回は3つのQRコードが表示されました。1つ目と2つ目は細かいQRコードで、3つ目はそれ程細かくないQRコードでした。

5-3. Twilio Authy Authenticator

登録しているアカウントを旧スマホでバックアップすることで簡単にできました。

  1. 【旧スマホのAuthyアプリ】バックアップを有効にする
    本来はAuthyアプリにアカウントを登録したタイミングで行う作業
    1. アプリを開き、右上のメニューから[Settings] > [ACCOUNTS]タブ > Backups をON にする
    2. Backup用に登録するパスワードを入力して[Enable Backup] をタップ
  2. 【新スマホのAuthyアプリ】
    1. アプリを起動し、登録している電話番号を入力して[Submit] をタップ
    2. [Use existing device with Authy installed] をタップ
  3. 【旧スマホのAuthyアプリ】
    1. アプリを開くと、New Device の画面が表示されるので[ACCEPT] をタップ
    2. “OK” のテキスト入力するよう求められるので、“OK”(2文字)を入力して[OK] をタップ
  4. 【新スマホのAuthyアプリ】
    1. [Settings] > [DEVICES]タブ に”Android” という名前のデバイスが2つ表示されているので、Allow multi-device をOFF にする

新スマホのAuthyアプリにアカウントが表示されました。
ちなみに登録しているSenGrid アカウントの表示されているコードが旧スマホと新スマホで異なっていましたが、新スマホの番号を使ってSendGird にログインすることができました。

5-4. LINE

「かんたん引き継ぎQRコード」というQRコードを使う方法で簡単にできました。
ただ、Android 同士の移行ではこれだけだとトーク履歴が移行されないので「トーク履歴のバックアップと復元」で旧スマホのトーク履歴をGoogle ドライブに保存してトーク履歴も移行します。

  1. 【旧スマホのLINE アプリ】トーク履歴のバックアップ、QRコードを表示
    1. アプリを開き、[設定] > [トーク履歴のバックアップ・復元] でバックアップ用のPINコードを設定して、現時点のバックアップをGoogle ドライブに保存する
    2. [設定] > [かんたん引き継ぎQRコード] をタップしてQRコードを表示する
  2. 【新スマホのLINE アプリ】QRコードをスキャン
    • アプリを起動し、[ログイン] > [QRコードでログイン] > [QRコードをスキャン] をタップしてQRコードをスキャンする
  3. 【旧スマホのLINE アプリ】QRコードスキャンの承認
    • “このQRコードをスキャンしましたか?” と表示されるので、”はい、スキャンしました” のチェックをONにしてから[次へ] をタップする
  4. 【新スマホのLINE アプリ】トーク履歴の移行
    1. Google アカウントを選択するページが表示されるので、Google アカウントを選択して[トーク履歴を復元] をタップするとトーク履歴の復元が始まるので、そのまま[次へ] をタップする
    2. “端末の位置情報の提供”と “LINE Beacon の利用” の同意ページで[OK] をタップ ※両方とも任意なので提供・利用したくなければチェックを外す

新スマホでLINE アプリを使える状態になりました。トーク履歴もあります。

旧スマホのLINE アプリを見ると、”利用することができません” と表示されています。同じアカウントを複数のスマホで同時に使うことができない仕組みになっているようです。

<補足> メールアドレスと電話番号、パスワードの位置付けがよく分からなかったので調べてみたら下記の扱いのようでした。

  • 電話番号:必須(スマホを紛失・故障した際のLINEアカウントの引き継ぎ時に使う)
  • パスワード:必須(スマホの紛失・故障・機種変更した際のLINEアカウントの引き継ぎ、パソコン版LINE利用時に使う)
  • メールアドレス:任意(スマホの機種変更でLINEアカウント引き継ぎ時にパスワードを忘れていても再設定できる)

参考

5-5. モバイルSuica

旧スマホのおサイフケータイアプリにログインしているGoogle アカウントと同じアカウントで新スマホのおサイフケータイアプリにログインすることで、Suica カードをGoogle アカウント経由で旧スマホから新スマホに移行するようです。
モバイルSuica アプリとおサイフケータイアプリの2つのアプリを使うので、何のための操作をしているのか感覚的に分かりづらく感じました。

  1. 【旧スマホのモバイルSuicaアプリ】カードを預ける(Step 1)
    1. アプリを開き、[会員メニュー] > [カードを預ける(機種変更)] > [「おサイフケータイ」アプリ起動] > [アプリ起動] をタップすると、おサイフケータイアプリが起動する
  2. 【旧スマホのおサイフケータイアプリ】カードを預ける(Step 2)
    1. [カードを預ける(機種変更)] > [はい] をタップ
    2. “カードを預ける” におサイフケータイアプリにログインしているGoogleアカウントのメールアドレスが表示されるので[預ける] をタップ
    3. “このカードのおサイフケータイアプリでの受け取りには、ご利用中のGoogle アカウントが必要です” と表示されるので[閉じる] をタップ
    4. マイサービスに表示されていたモバイルSuica が表示されなくなった
  3. 【新スマホのおサイフケータイアプリ】おサイフケータイアプリの初期設定
    1. アプリを起動し、[次へ] をタップ
    2. 利用規約のチェックをONにして[次へ] をタップ
    3. “初期設定完了” と表示されたら[次へ] をタップ
    4. “おサイフケータイアプリ「Googleでログイン」について” と表示されたら[次へ] をタップ
    5. “Googleでログインしてください” と表示されたら[Google でログイン] をタップ
    6. マイサービスが表示される
  4. 【新スマホのモバイルSuicaアプリ】カードを受け取る(Step 1)
    1. アプリを起動し、[スキップ] > [はじめる] をタップ
    2. [すでに会員の方はこちら] をタップ
    3. メールアドレスとパスワードを入力して[ログイン] をタップ
    4. “カードを受け取る” で[次へ] をタップ
    5. “受け取るSuicaを選んでください” で表示されたSuica カードから移行するカードを選択して[受け取る] をタップ
    6. “おサイフケータイを起動します” で[アプリ起動] をタップすると、おサイフケータイアプリが起動する
  5. 【新スマホのおサイフケータイアプリ】カードを受け取る(Step 2)
    1. “受け取るカードの選択” で[受け取る] をタップ
    2. 受け取る選択をしたSuica カードが表示された
  6. 【新スマホのモバイルSuicaアプリ】
    1. アプリを開き、パスワードを入力して[ログイン] をタップ
    2. 受け取る選択をしたSuica カードが表示された

新スマホでモバイルSuica アプリを使える状態になりました。
見た目上は旧スマホと同じ状態なので、たぶん改札を通れるはずです。

旧スマホのモバイルSuica アプリを見ると、新規登録かカードの受け取りかを選択する画面が表示されています。同じSuica カードを複数のスマホで同時に使うことができない仕組みになっているようです。

5-6. ヨドバシゴールドポイントカード

ヨドバシカメラの公式サイトを見ると、新スマホで自身のアカウントでログインすればポイント残高はそのまま使えるという記述がありますが、機種変更時の手順は(1) 旧スマホのアプリで削除、(2) 新スマホのアプリで再登録、となっているので素直に従います。

  1. 【旧スマホのヨドバシゴールドポイントカードアプリ】
    1. アプリを開き、左上のメニューから[xx様のマイページ] > [ゴールドポイントカード登録解除] をタップ
    2. “アプリのゴールドポイントカードの登録解除” で[解除する] をタップ
  2. 【新スマホのヨドバシゴールドポイントカードアプリ】
    1. アプリを起動し、会員ID(メールアドレス)とパスワードを入力し[ログイン] をタップ
    2. 生年月日を入力し[送信] をタップ
    3. “ゴールドポイントの登録が完了しました” と表示されたら[おサイフケータイを登録する] をタップ ※[今はしない] の選択も可能
    4. ゴールドポイント残高に金額が表示された

新スマホでヨドバシゴールドポイントカード アプリを使える状態になりました。

5-7. 三菱UFJ銀行

三菱UFJ銀行の公式サイトを見ると、スマホを機種変更した場合は再度ワンタイムパスワードの利用登録が必要という記述があります。このワンタイムパスワードは振込などの取引をする際に使うものなので、初期セットアップのタイミングで登録しておきます。

  1. 【新スマホの三菱UFJ銀行アプリ】
    1. アプリを起動し、[ログイン] をタップ
    2. 利用規約の[同意してアプリを利用する] をタップ
    3. 契約番号とログインパスワードを入力して[ログイン] をタップ
    4. ログインに成功すると”ワンタイムパスワード利用登録” のウィンドウが表示されるので[登録に進む] をタップ
    5. 電話、運転免許証またはマイナンバーカードのいずれかを選択して認証すると設定が完了する

旧スマホの三菱UFJ銀行アプリで解除などの操作は何もやらなかったのですが、旧スマホの三菱UFJ銀行アプリを見ると、アプリ初回起動時のような状態になっていました。

6. 旧スマホのデバイスに紐づいた設定を解除する

6-1. Google アカウントのスマートフォンのセキュリティキーの登録を削除

Google アカウントの2段階認証で旧スマホを使ったAndroidスマホをセキュリティキーとして使う機能を有効にしていたので、これを無効にします。

  1. パソコンのブラウザでGoogle アカウントのページを開く
  2. サイドメニューの[セキュリティ] をクリックし、”Google へのログイン” の[2段階認証プロセス] をクリック
  3. アカウントのパスワードを入力して[次へ] をクリック
  4. “2 段階認証プロセス” で[セキュリティキー] をクリック
  5. “セキュリティ キー” に”Titan セキュリティを使用” とコメントが書かれた”スマートフォンのセキュリティ キー” があるので、右のゴミ箱アイコンをクリックして削除

2段階認証プロセスに他のセキュリティキーや認証アプリ、SMS などの手段を登録しているので後で削除すればよい気もしますが、この設定が残っていて何もよいことはないのでこのタイミングで忘れず削除しておきます。

あとがき

最近、既存のパスワードに置き換わるユーザ認証の仕組みとしてPasskey が話題になっているので、スマホの機種変更がPasskey によってどうなるのかを体験してみたかったのですが、Android とChrome の一般ユーザへのサービス提供は今年の11月後半の予定とのことだったので、待ちきれませんでした。
スマホの機種変更に関係なく安全なユーザ認証を実現する技術として期待されているので、情報は追っていきたいと思います。

参照

Google のSEO対策

Google の検索結果に自身のウェブサイトが表示されるようになりましたが、SEO対策については行きあたりばったりでやっていたので、一度立ち止まってGoogle のSEO についての基本的なことを整理しておこうと思います。
WordPress のブログ立ち上げの流れなので、WordPress と絡めた整理になります。

1. はじめに

Google の検索結果に自身のウェブサイトが表示されるようにするためには、Google にインデックス登録してもらう必要があります。
クローラ等によりウェブサイトのページが検出されますが、検出されたページは内容を分析された上でGoogleインデックスに登録されます。

インデックスとは

ウェブサイトのURLを登録するGoogleの大規模なデータベースのことをインデックスと呼びます。インデックスに登録されると検索結果に表示されるようになります。

ちなみに、インデックスという用語は、Google検索セントラルというGoogle のSEO関連のサポート用のページで下記のような使い方をされていました。

  • (Googleは)定期的にウェブを探索し、見つかったサイトを Google のインデックスに登録しています
  • Google はインデックスに追加するサイトを自動で探しています

また、インデックスを使った以下のような表現もあります。

  • Googleインデックス
    • Googleのインデックスのこと
  • インデックス登録
    • クローラが検出したページの内容を把握しようとするプロセスのこと
    • インデックス登録をリクエスト:ウェブサイトの運営者がGoogleにインデックスの登録を依頼すること

2. Google がウェブサイトを検出する方法

Google がウェブサイトのページを検出する方法は、いろいろな方法があるようですが、ここでは下記の3つのパターンに分けて整理してみようと思います。

  • Googleのクローラによるウェブサイトの検出
  • ウェブサイトの運営者からのインデックス登録の依頼
  • ウェブサイトからの更新の通知

それぞれ、章を分けて説明します。

3. Google のクローラによるウェブサイトの検出

Googleのクローラは、既知のウェブサイトのリンクをたどる等により新しいページや更新されたページを検出します。

クローラとは

正式には「ウェブクローラ」。
定期的にウェブを探索して、新しいページや更新されたページを検出するプログラムのことをクローラと呼びます。
また、クローラに関連する用語に以下のようなものがあります。

  • クローリング
    • クローラがウェブを探索すること
  • クロール
    • 「クローリング」と同じ意義
  • クローラビリティ
    • ウェブサイトのページが クローラからアクセス可能なこと、および正しく認識されること
  • Googlebot
    • Google のクローラの総称

クローラによるページの検出は以下の方法で行われます。

  • 既知のページのリンクをたどって検出
  • ウェブサイトの運営者から提出されたサイトマップのURLを元に検出

既知のページのリンクをたどって検出

ウェブサイトが他のブログやウェブサイトでリンク付きで紹介されていると、そのリンクのURLをたどってクローラがページを検出します。

ウェブサイトの運営者から提出されたサイトマップのURLを元に検出

Google Search Console を使ってウェブサイトのサイトマップのURL をGoogle に送信すると、クローラがサイトマップに記述されているページのURL にアクセスしてページを検出します。

4. ウェブサイトの運営者からのインデックス登録の依頼

Google Search Console を使ってインデックス登録したいページのURL をGoogle に送信すると、クローラがそのURL にアクセスしてページを検出します。

5. ウェブサイトからの更新の通知

外部のウェブホストなどからの、新しいページや更新されたページがあることの通知を受けて、クローラがそのページのURL にアクセスしてページを検出します。

調べてみると、この方法がインデックス登録に有効に働くのか良くわからないですが、仕組み自体がなくなっている訳ではないので記載しておきます。

更新情報サービス(XML-RPC ping)

WordPress は標準で、投稿の新規作成や更新をすると、更新情報サービスの設定で登録したURL に向けてXML-RPC ping を送信して、投稿の新規作成や更新があったことを通知する機能があります。
※ XML-RPC ping は、リクエストボディをXML で記述したPOST のHTTP リクエスト

更新情報サービスは、サイドメニューの[設定] > [投稿設定] で登録することができます。

サイドメニューの[設定] > [投稿設定] > 更新情報サービス

デフォルトで”Ping-o-Matic” というWordPress Foundation が運営している更新情報サービスのURLが登録されています。

ここに、他の更新情報サービスのURL を追加すれば、追加したURL にもping が送信されるようになります。

WordPress.org の「更新通知サービス」のページに、例として更新情報サービスのURLがたくさん掲載されていますが、”停止しているものもあるかもしれませんのでご注意下さい” と注意書きがあるので、単純に全てコピペすればOKという訳ではなさそうです。

試しにいくつかのURLにアクセスしてみると、301エラー(Moved Permanently)や404エラー(Not Found)が返ったり、ドメインの名前解決ができないものがありました。現在ではあまり活用されていない仕組みなのでしょうか。

ちなみに、Google は2014年頃にブログ検索というサービスが終了した時点でpingを受けなくなっているようです。

個人的には、意味のない通信を送出するのはあまり気持ちの良いことではないので、当ブログには元々登録されていたPing-o-Matic だけ登録した状態にしておくことにしました。

WebSub(旧名:PubSubHubbub)

WordPress の標準機能ではないですが、プラグインを追加することで前述の「更新情報サービス(XML-RPC)」と同じような、投稿の新規作成や更新をすると、投稿の新規作成や更新があったことを通知するWebSub(旧名:PubSubHubbub)という仕組みを使うことができます。

WebSub のことを簡単に記載しておきます。

  • WebSub はPublisher、Subscriber、Hub の三者で構成される
  • ブログの場合、Publisher(ブログ)、Subscriber(Google)、Hub(Hubサービス) という位置づけになる
  • Publisher が投稿を追加するとHub に通知され、通知を受けたHub はSubscriber にPublisher の投稿が追加されたことを通知する

WordPress のプラグインは下記の2つがよさそうでした。

  • WebSub (FKA. PubSubHubbub)
    • PubSubHubbub Team が開発している
    • WordPress 5.9 リリースの翌日に5.9の対応版がリリースされた(最終更新日:2022/1/27)ので、継続してメンテナンスされていることが期待できる
    • デフォルトの通知先:Google PubSubHubbub Hub、SuperFeedr、WebSubHub
  • PuSHPress
    • Automattic 社がプラグインの開発に関わっている
    • プラグインにHub が組み込まれているので、WordPress からの通知はSubscriber に直接送られる(他のプラグインは、WordPress →Hub →Subscriber の経路で送られる)

当ブログでは、WebSub (FKA. PubSubHubbub) プラグインを使うことにしました。
通知先のHub は、サイドメニューの[設定] > [WebSub] で登録することができます。

WordPressの管理画面 サイドメニューの[設定] > [WebSub]

デフォルトで3つのHub のURL が登録されていました。
一番上の”https://pubsubhubbub.appspot.com” は”google” という文字がないですが、Google のHub のようです。

6. Google Search Console について

過去の投稿でGoogle Search Console を使ってサイトマップの送信とインデックス登録について記載しているので、ここではGoogle Search Console の便利なツールについて簡単に記載します。

サイトマップの登録

サイトマップのURL をGoogle に登録することができます。
登録しておくと、Google はサイトマップに更新がないかを定期的に確認するようになります。

URL検査(インデックス登録)

ウェブサイトの特定のURL に対して、Google にインデックス登録を依頼することができます。
インデックスに登録するかどうかは、Google がページを分析して決定するので、依頼すれば必ず登録される訳ではないです。

robots.txt テスター

robots.txt に対して、以下のチェックをすることができます。

  • robots.txt の構文とロジック上の問題がないかのチェック
  • ウェブサイト上の特定のURLに対して、Google のクローラをブロックできているかのチェック

後者は、例えばGoogle画像検索で表示されたくない画像のURLに対して、Googlebot-Image クローラをブロックできているかのテストができます。

モバイルフレンドリーテスト

ウェブサイトの特定のURL に対して、以下のチェックをすることができます。

  • モバイルデバイスでのページの使いやすさのテスト
  • クローラがページにアクセス可能で、コンテンツを正しく認識できるかのテスト

7. あとがき

SEO の基本を整理しよう、ということでGoogle のSEO対策についてざっと整理してみました。なんとなく要点はつかめたような気がしています。

これまでSEO ということでGoogle のことを取り上げていましたが、今後はMicrosoft のBing のSEO対策など、横に展開することもしていきたいと思います。

参考

Google Search Console(その2)

前々回の投稿「WordPressのサイトマップ」でサイトマップをGoogleに送信しましたが、その後なかなかGoogleの検索結果に表示されないのでGoogleの「初心者向けSEO」というページを調べてみると、Search Console の[URL検査] というツールでインデックス登録の依頼ができることが分かりました。
以下、その作業記録を記載します。

Googleにインデックス登録を依頼する

1. Search Console のページを開く

Google Search Console のページを開き、左上のプロパティが対象のウェブサイトのURL が選択されていることを確認します。

Search Console

2. URL検査 の実行

サイドメニューの[URL検査] ボタンをクリックすると、検索窓へのURLの入力を求められるので、自身のウェブサイトのURLを入力します。
今回、「https://madoverload.com」を入力しました。

すると、URL検査の処理が開始され、しばらくすると検査結果として下記のメッセージが表示されました。

URLがGoogleに登録されていません
検査結果(インデックスの登録)
検出-インデックス未登録
検査結果(カバレッジ)

どうやらエラーはないけれども、まだインデックスに登録されていないようです。

3. 公開URLをテスト

URL検査の検査結果が表示されたページの右上の[公開URLをテスト] ボタンをクリックします。
この[公開URLをテスト]は、指定したURL がGoogle でインデックス登録ができるかどうかを確認する機能のようです。

公開URLをテストしています
公開URLをテスト実行中

公開URLのテストが完了すると、検査結果の文言が更新されました。
・更新前:URLがGoogleに登録されていません
・更新後:URLはGoogleに登録できます

URLはGoogleに登録できます
検査結果(公開URLのテスト後)
検査結果(登録の可否の詳細)

登録の可否に記載されているメッセージ「特定の条件が満たされている場合にのみ、URLはインデックスに登録されます」の特定の条件のリンク先を見てみると、インデックスの登録が上手く行かない時に役立ちそうな情報が記載されていたので、リンク先を記載しておきます。

4. インデックス登録をリクエスト

URL検査の検査結果の”インデックス登録をリクエスト” がリンクになっているのでクリックすると、下記のメッセージが表示されました。

インデックス登録をリクエスト済み

ウィンドウ右下のOKをクリックして検査結果のページに戻ると、リンクになっていた箇所の文言が更新されました。
・更新前:インデックス登録をリクエスト
・更新後:インデックス登録をリクエスト済み

検索結果(インデックス登録をリクエスト後)

5. インデックスの登録完了

翌日、URL検査を再度実行してみると、検査結果がインデックスに登録さたという内容に更新されていました。

検査結果(インデックス登録をリクエストの翌日)

Googleでsite:クエリにドメイン名を指定して検索してみると、検索結果に表示されるようになっていました。

Google検索結果「site:madoverload.com」

あとがき

ブログを開設してから1ヶ月過ぎていますが、ようやくGoogleの検査結果に表示されるようになりました。

今回、ブログを開設してからGoogleの検索結果に表示されるようになるまで、ざっくり表現すると、下記の流れでやりました。

  1. WordPress のブログ開設
  2. サイトマップの作成
  3. Googleにサイトマップ送信
  4. Googleにインデックスの登録を申請
  5. Googleのインデックスに登録(検索結果に表示される)

SEO対策について詳しくないので、行きあたりばったりなところがありましたが、正直なんとかなったという感じです。

SEO対策に力を入れるつもりがなくても、SEOの基本的なことの理解が不十分であることが分かったので、この機会にいろいろ調べて整理しようと思います。(その投稿がいつできるかは整理の進み具合により時間がかかる可能性があるので未定)

参照

Google Search Console(その1)

直前の投稿「WordPressのサイトマップ」で、ブログのサイトマップをGoogle Search Console を使ってGoogle に送信しましたが、このSearch Console を使い始める際の手順を記載していなかったので記載しておきます。

Search Console についての解説は最低限に留め、あくまでも今回の作業記録を記載します。

Google Search Console とは

Google が提供する無料のサービス(ツール郡)で、自身のウェブサイトのコンテンツをGoogle に送信したり、Google での検索の状況を確認することができます。

Google Search Console を始める

1. Search Console にアクセス

Google検索セントラルのサイトにアクセスして[ご利用開始] ボタンをクリックして表示されるページで、[Search Console に移動] ボタンをクリックします。

2. プロパティタイプを選択

登録するウェブサイトをドメインまたはURL のどちらで指定するのかを選択します。

プロパティタイプの選択

ドメインとURLプレフィックスの違いを簡単に記載しておきます。

ドメインURLプレフィックス
ウェブサイトの入力
(例)
example.com
sub1.example.com
https://example.com
https://www.example.com
https://sub1.example.com
所有権の確認方法ドメイン名プロバイダ以下のいずれか
・HTMLファイル
・HTMLタグ
・Google Analytics
・Googleタグマネージャー
・ドメイン名プロバイダ
比較(ドメイン⇔URLプレフィックス)

今回、”URLプレフィックス” を選択したので、下記のように自サイトのURLを入力して[続行] ボタンをクリックしました。

URLプレフィックスを選択

3. 所有権の確認(URLプレフィックス)

プロパティタイプ:”URLプレフィックス” を選択すると、所有権の確認方法を選択するページが表示されます。

所有権の確認 > HTMLファイル

所有権の確認は、下記の5つの方法から選択できます。

内容
HTMLファイル指定されたHTMLファイルを自身のウェブサイトのルートフォルダにアップロードする
HTMLタグ指定されたHTMLメタタグを自身のウェブページのHTMLページのheadタグ内に記述する
※<meta name=”google-site-verification” 〜
Google AnalyticsGoogle Analytics のアカウントを使用する
(自身のウェブページのHTMLページのheadタグ内に以下を記述する)
・Google アナリティクス タグ
・トラッキング コード
GoogleタグマネージャーGoogleタグマネージャーのアカウントを使用する
(自身のウェブページのHTMLページのbodyタグ内に以下を記述する)
・タグ マネージャー コード
ドメイン名プロバイダ指定されたTXTレコードを自身のウェブサイトのDNSレコードに追加する
所有者の確認方法

今回、”HTMLファイル” を選択しました。
以下、HTMLファイルで所有権の確認をする手順を記載します。

  1. 「1. ファイルをダウンロード」の「↓ xxxx〜xxx.html」ボタンをクリックして、HTMLファイルを端末上にダウンロードする
  2. FTPツール(FileZilla など)を使って、ダウンロードしたHTMLファイルを自身のウェブサイトのルートフォルダにアップロードする
  3. アップロードしたファイルのパーミッションを読込のみ(404など)に変更する
  4. 所有権の確認の[確認] ボタンをクリックすると所有権の確認処理が始まり、下記の”所有権を証明しました” のページが表示された
所有権を証明しました

4. 所有権を証明した後の作業

この後、直前の投稿「WordPressのサイトマップ」の「サイトマップをGoogle に送信する」に記載した作業を行いました。

あとがき

今回、プロパティタイプは”URLプレフィックス”、所有権の確認は”HTMLファイル”を選択した理由を記載しておきます。

  • プロパティタイプ:”URLプレフィックス” を選択した理由
    • 所有権の確認を”HTMLファイル”にしたかったため
  • 所有権の確認方法:”HTMLファイル” を選択した理由
    • ブログのウェブページとDNSサーバの設定に影響がない
    • 他の確認方法と比べて、第三者が確認方法を特定しづらい
    • 静的HTMLファイルをサーバーに配置するのみで容易
    • Google Analytics と Googleタグマネージャーを使っていない

今後、以下のようなことがあれば、変更を検討することになりそうです。

  • Google Analytics を使うことになった場合、”Google Analytics”
  • Googleタグマネージャーを使うことになった場合、”Googleタグマネージャー”
  • サブドメインを使うことになった場合、サブドメイン向けの”HTMLファイル”を追加するか、プロパティタイプを”ドメイン”に変更する
  • 所有権の確認が2つ以上の方法で行われるようにしたくなった場合、HTMLファイル+HTMLタグ+ドメイン名プロバイダ

参照

WordPressのサイトマップ

WordPress のサイトマップについて調べてみました。

サイトマップとは

サイトマップは、ウェブサイトの投稿やページ、その他のファイルの情報を記述したファイルで、Google などの検索エンジンがこのファイルを読み込むことで、ウェブサイトの情報を効率的に収集することができるようになります。

サイトマップにはオプションとして、コンテンツがいつ更新されたのかや、ウェブサイトがどれぐらいの頻度で更新されているのか等の検索エンジンにとって有益な情報を記述することもできます。

サイトマップの記述ルール等の仕様は、大手検索エンジンのGoogle、Yahoo、Microsoft で標準化を行っています。

  • Sitemaps.org − Sitemap.org (スポンサー:Google、Yahoo、Microsoft)

WordPress 標準のサイトマップ

WordPress は標準でサイトマップが出力されるようになっています。
以前はプラグインが必要でしたが、どうやらWordPress 5.5 で出力されるようになったみたいです。

サイトマップの場所は、ルートの”wp-sitemap.xml” です。
当ブログのサイトマップは下記のURLになります。
※ “sitemap.xml” にアクセスすると”wp-sitemap.xml” にリダイレクトされるようになっていました。

ブラウザからアクセスすると、下記のように表示されます。

WordPress標準のサイトマップ

なお、デフォルトのままでは問題や改善すべき点があったので、以下その対応について記載します。

ユーザ名を非表示にする

デフォルトでは”wp-sitemap-users-1.xml” というサイトマップにWordPress に登録しているユーザのユーザ名が表示されてしまうので、function.php を更新してこのサイトマップを非表示にします。
※ ユーザ名が漏洩すると、攻撃者に管理画面でユーザ名を固定したパスワードのブルートフォース攻撃の機会を与えてしまうので、ユーザ名の漏洩はセキュリティの観点であまり望ましくないことと考えています。

function.php に下記を追記します。(末尾に追記しました)

/**
 * Removing Certain Sitemaps
 * users
 */
add_filter(
    'wp_sitemaps_add_provider',
    function( $provider, $name ) {
        if ( 'users' === $name ) {
            return false;
        }
        return $provider;
    },
    10,
    2
);

これで、“wp-sitemap-users-1.xml” が出力されなくなりました。

“wp-sitemap-users-1.xml” が表示されなくなった

最終更新日を表示する

デフォルトでは最終更新日が出力されないので、function.php を更新して出力されるようにします。
※ 最終更新日がないと、検索エンジンのクローラがコンテンツがいつ更新されたのかや、ウェブサイトがどれぐらいの頻度で更新されているのか等が判断できないので、表示した方がよいみたいです。

function.php に下記を追記します。(末尾に追記しました)

/**
 * Adding Additional Tags to Sitemap Entries
 * lastmod
 */
add_filter(
    'wp_sitemaps_posts_entry',
    function( $entry, $post ) {
        $entry['lastmod'] = date('c', strtotime($post->post_modified_gmt));
        return $entry;
    },
    10,
    2
);

これで、下記のように最終更新日が表示されるようになりました。

最終更新日が表示されていない
最終更新日が表示されるようになった

なお、後述「サイトマップのカスタマイズについて」で案内しているリンク先に最終更新日を追加するサンプルコードが記載されていますが、そのままだと日付の書式がW3C Datetime フォーマットになっていなかったので、W3C Datetime フォーマットで出力されるようにしました。
(Google Search Console でサイトマップのステータスが、”無効な日付” でエラーになっているのがこれで解消されました)

サイトマップのカスタマイズについて

他にも、カスタムサイトマップの追加や、特定の投稿やページの除去、サイトマップ自体を完全に表示しないようにするなど色々できるみたいです。
詳しくは、以下のサイトをご参照ください。

サイトマップまわりの仕組み

robots.txt

robots.txt は、検索エンジンのクローラに対して、サイトのどの URL にアクセスしてよいかを伝えるものです。
robots.txt の場所は、ルートの”robots.txt ” です。
当ブログのrobots.txt は下記のURLになります。

WordPress 標準のサイトマップが出力される状態でrobots.txt を見てみると、下記のようにサイトマップのURLが記述されていました。
この記述により、クローラがサイトマップファイルを見つけることができるようになります。

Sitemap: https://madoverload.com/wp-sitemap.xml

robots メタタグ

robots メタタグは、HTMLページのheadタグ内に「<meta name=’robots’ 〜」と記述するもので、ページ単位で検索エンジンに対して、登録の是非や、ユーザに対して検索結果をどのように表示してもらいたいのかを指定するものです。
当ブログのHTMLページのrobots メタタグは下記の記述になっていました。

<meta name='robots' content='max-image-preview:large' />

WordPress の設定

WordPress の設定画面で、検索エンジンのクローラにサイトマップやページを読み込んでもらいたいかどうかを設定することができます。
管理画面の[設定] > [表示設定] の”検索エンジンでの表示” で行います。

管理画面の[設定] > [表示設定]

“検索エンジンがサイトをインデックスしないようにする” のチェックをOFFにしていると、サイトマップ、robots.txt、robots メタタグはこれまで説明した状態になっていました。

試しにチェックをONにすると、下記の状態になりました。

  • サイトマップのURLにアクセスすると、”お探しのページが見つかりません”というWordPressのページが表示される
  • robots.txt から「Sitemap: https://madoverload.com/wp-sitemap.xml」が消える
  • robots メタタグが下記の記述になる(noindexはページをインデックスに登録してもらいたくない、nofollowはページのリンクを辿ってもらいたくない)
<meta name='robots' content='noindex, nofollow' />

当ブログはもう初期設定も終え、投稿もいくつかしているのでチェックをOFFにして検索エンジンのクローラを受け入れる状態にしておきますが、ブログの開設中はチェックをONにしておいた方がよかったのかもしれません。
(とはいえブログを開設して1ヶ月経ちますが、ドメイン名をググってもヒットしませんでした)

サイトマップをGoogle に送信する

当ブログは開設して1ヶ月になりますが、誰も存在を知らない状態です。Twitter への自動投稿でブログのURLを貼るようにしましたが、アクセス数が0という日も普通にあります。

せっかくサイトマップが出力されるようになっているので、Google にサイトマップの存在を知らせてインデックスに登録してもらうよう働きかけてみたいと思います。

調べてみると、Google Search Console にサイトマップを送信することで、それができるようです。
以下、その手順を記載します。

1. Search Console にブログを登録する

サイトマップをGoogle Search Console に送信する為には、Search Console に自身のウェブサイトのドメインまたはURLを登録して、そのウェブサイトが自身に所有権があることを証明する必要があります。
具体的な手順は省略しますが、今回は下記で行いました。

  • プロパティタイプの選択:URLプレフィックス
  • 所有権の確認:指定されたHTMLファイルをダウンロードして自サイトにアップロード

2. Search Console にサイトマップを送信する

Search Console にウェブサイトを登録すると、Search Console の管理画面が表示されます。
サイドメニューの[インデックス] > [サイトマップ] をクリックすると、”新しいサイトマップの追加” というサイトマップのファイル名を入力するフォームが表示されるので、ファイル名を入力して[送信] ボタンをクリックします。

サイドメニューの[インデックス] > [サイトマップ]

サイトマップの送信が完了すると、下記のメッセージが表示されます。

[OK] ボタンをクリックすると元の画面に戻り、送信する前は何も表示されていなかった”送信されたサイトマップ” に、今回送信したサイトマップが表示されます。
送信してすぐはステータスが”取得できませんでした” となっていましたが、1〜2分待つと”成功しました” に更新されました。

サイドメニューの[インデックス] > [サイトマップ]

ここで、送信したサイトマップをクリックすると、読み込まれたサイトマップの処理結果を確認することができます。

読み込まれたサイトマップ(エラーあり)

ステータスがエラーになっているサイトマップがあるので、エラーになっているサイトマップをクリックすると詳細情報が表示されます。

サイトマップの詳細情報(エラー)

サイトマップの読み込みはできるようですが、「親タグ:url、タグ:lastmod」の日付の値に問題があるということです。

このエラーは、前述「最終更新日を表示する」に記載した最終更新日の日付の書式がW3C Datetime フォーマットになっていなかったことが原因によるもので、W3C Datetime フォーマットで出力されるようにすることで解消することができました。

読み込まれたサイトマップ(エラーなし)

エラーが解消されたサイトマップをクリックすると、詳細画面も”サイトマップは正常に処理されました” となっていました。

サイトマップの詳細情報(正常)

なお、エラーの原因を解消しても直ぐにはステータスが更新されず、24時間経ってから見てみるとステータスが”成功しました” に更新されていました。
試しに、送信した日にSearch Console に登録したサイトマップを削除し、再度”新しいサイトマップの追加” をしてみたのですが、エラーのままだったので、この登録はキャッシュに登録されて定期的に処理されているのかもしれません。

サイトマップの再送について調べてみると、Search Console のヘルプに「サイトマップを変更した場合でも、Google がすでに認識しているサイトマップを再送信する必要はありません。Google は、次にサイトをクロールしたときに、変更を検出します」という記載がありました。
これは、再送は即時に反映される訳ではないということの裏返しの表現なのかもしれません。

あとがき

サイトマップを表示させるためにはプラグインの導入が必要と思っていましたが、調べてみるとプラグインがなくてもなんとかなりました。
ただ、プラグインを入れたからこそできることというのがあるかもしれないので、もし必要にかられたら導入を検討したいと思います。

サイトマップのGoogle への登録が成功し、エラーもなくなりましたが、今回の作業が完了した後にドメイン名をググってもヒットしませんでした。
はたして、いつになったら検索結果に表示されるのでしょうか。。

参考