多言語サイトの制作が重なったので、少しまとめておきます。
多言語化を実現しようとするとWordPress単体ではやはり難しくプラグインを利用することになります。いくつか確認したプラグインの中で「Bogo」が唯一の選択肢でした。ただ少し課題もあります。

2020.3.5 追記
この記事は2019.12.25時点のものです。現在プラグイン「Bogo」のバージョンアップによりGutenbergの問題も解決されているようです。詳細を確認後、改めて訂正しますが、この記事の内容は参考までにご覧ください。

多言語サイトのハードル

多言語サイトは言語ごとに同じサイトが複数あるイメージです。これをWordPressで実現するには下記の課題があります。

  • 同じ内容のページを言語ごとに複数持つ
  • 対応したページ間のリンクを貼る(存在しない場合はリンクしない)
  • SEOのため正しいHTMLを記述にする
  • 運用をわかりやすい形にする

もしWordPress単体で行う場合は、WordPressのマルチサイト機能を使った設計になりそうです。ただ設定項目が多くなり、投稿時にスラッグを合わせるなど約束事も増えます。マルチサイトに対応していないプラグインも多いようなので、かなりハードルは高いように思います。

Googleの自動翻訳を利用するプラグインなどもありますが、コーポレートサイトなどで自動翻訳を利用するケースもあまりないため、これも採用できません。

その中で必要十分な選択肢が「Bogo」でした。

興味のある方に少し技術の詳細を説明しましょう。Bogo は一投稿につき一言語を割り当てるタイプの多言語化プラグインです。Bogo の設計は WordPress と親和性が高く、このカテゴリーの他のプラグインとは異なり、データベースに独自のテーブルを追加するようなことがありません。この設計が Bogo の高い信頼性と堅牢性、コンフリクトが起きにくいといった利点を生み出しています。

引用:https://ja.wordpress.org/plugins/bogo/

基本的には通常のWordPressの構成のまま、各言語ページを相互に結びつけるという機能を追加してくれます。仕組みとしてはページのカスタムフィールドを使って対応させているようです。
またサイト名やカテゴリー名も言語ごとに切り替える必要がありますが、その点もWordPressの標準的な機能(翻訳ファイル)が使われています。
プラグインの説明にもある通り、WordPressを素直に使用した設計になっているため、他のプラグインともぶつかりづらいようです。

ただURLの操作についてはWordPressのルールから外れた仕様になっているので、この点はリスクになっています。
例えば、日本語サイトに英語サイトを追加した場合はURLに「/en/」がつくようになります。これは多言語サイトとしては一般的な形で良いのですが、WordPressとしてはイレギュラーな仕様のため若干無理をしている部分です。
またもう一点、「/about」と「/en/about」のように実際には別のページでも同じスラッグ(=URLになるページ名称)を付けられるようになっています。多言語サイトのURL設計としてはとてもわかりやすく理想的な形です。ただ本来スラッグはサイト内で唯一のものとすることが原則なので、何らかの問題を起こす可能性はあります(この点後述します)。

多言語サイトに関するGoogleの説明

Googleのサポートページ「多地域、多言語のサイトの管理」にSEO上の留意点がまとめられています。
重要と思える点は下記の2点です。

  1. 言語のバージョンごとに異なる URL を使用する
    言語ごとにページを分ける
  2. 複数の言語のバージョンがあることを Google に知らせる
    ページの中に対応する言語ページのURLを書く

例えば、日本語の文章とその英語翻訳が同じ1ページに記載されている場合がありますが、これはNGということになります。JavaScriptで表示を切り替えていてもGoogleには正しく伝わりません。

「Bogo」は言語ごとにページを分ける形になり、HTMLの中に対応する言語ページも自動で記述します。SEOの面でも問題ありません。

プラグイン「Bogo」のデメリット

1、現状Gutenbergに完全には対応していない

これを書いている時点で一番の問題はWordPressの入力方法「Gutenberg」に一部対応していない点です。

  • 固定ページの親子関係を指定できなくなる
  • 各言語ページのスラッグを統一できない

この2つの問題がGutenbergの場合に発生します。クラシックエディタでは問題ないようです。

コードの解析はしていませんが、おそらくGutenbergの編集画面にてスラッグや親子関係のチェックを行っているためのようです。
スラッグを統一できない点については、日本語と英語ページで同じスラッグとしたいところ、Gutenbergにて編集すると一方のスラッグが勝手に書き換わってしまうというものです。ただその後、一覧表示「クイック編集」では元に戻すことができるので、あくまでもGutenbergの編集画面だけの問題と考えてよさそうです。
この点「Bogo」のサポートページにも投稿があり作者の方も把握されているようです。いずれ改善されると思いますが現在は注意が必要です。

当面の対処方法としては下記のような形になりそうです。

  1. Gutenbergを使用しない
  2. 固定ページが1階層のみの場合に限り、Gutenbergを使用可能。ただしスラッグは言語ごとに個別に設定する(一方に「-en」をつけるなど)

複雑なサイトの場合、当面はGutenbergを使用せずクラシックエディタにて編集を行い、プラグインのアップデートを待つ方が良いと思います。

2、切り替えボタンがデザインしづらい

デザイン面では、言語の切り替えボタンがやや固定化しすぎている点がネックです。CSSでは限界があるため、functions.phpにて関数「bogo_language_switcher」を上書きするなどが必要です。

3、テーマファイル内の留意点

テーマファイル内で間違いやすい点として、翻訳した「サイト名」や「キャッチフレーズ」を取得したい場合、「get_bloginfo(‘description’)」ではメインの言語しか取得できません。表示しているページに対応した出力をする場合は、「bloginfo(‘description’)」と記述する必要があります。複数箇所で表示させる場合も変数に入れるのではなく、その場で表示する形になります。


Bogoを利用されている方やこれから利用する方は参考にしてみてください。
デメリットも多く書きましたが、多言語サイトには本当に理想的なプラグインなので、これからも応援しましょう。