スポンサーリンク

問題点

日本語の問題

DRUPAL 8からXMLエクスポートしてWordpressにインポートしました。記事に埋め込んだ画像ファイルへのリンクURLの変更をどうするかだけが課題だと思っていましたが日本語が使用されているとIDや数字などに置換されたり、英数字のみで表示されたりが発生しています。

タイトルが数値文字参照コードのまま

記事やカスタム記事のタイトルはpost_titleに保存されています。これが数値文字参照コードのままなため記事の表示では問題ないものの、記事の編集では 数値文字参照コードの文字列が表示され人間には何が書いてあるかは識別不能です。

スラッグが数字または英数字のみ

インポート時にスラッグは空欄なので自動生成されたと思われます。ここで日本語タイトルはそのまま保存されてもよさそうですが、日本語タイトルは内部では数値文字参照(16進数)で保存されているためにこれをスラッグで処理すると英語と数字のみで日本語のみのタイトルはID(数字)に置き換わるようです。この時、重複する文字列がある場合は後ろに数字が付与されているようで、生成されたスラッグがdrupalの場合ならdrupal1,drupal2,drupal3と重複しないように処理されます。問題になるのが記事のURL(パーマリンク)にこのスラッグが使用されていることです。
drupalでは記事タイトル(日本語名)をURLにしていたため、googleの検索に登録されたせっかくの記事のリンクが完全に切れてしまい別の記事として扱われます。SEOを考慮して数字や記号に変更されたけども実際は大きなマイナスです。

カテゴリやタグ名が数値文字参照コードのまま

カテゴリやタグの編集画面では日本語文字列で表示されますが、記事の編集画面の文書にあるカテゴリやタグの設定に表示されるリストは 数値文字参照コード(16進数)のままです。そのため、記事作成時にカテゴリやタグを識別できず選択できません。

メディアの問題

wordpressはメディアをメディアライブラリ(データベース)に登録しないとメディア一覧から利用できません。FTPで所定の場所に画像や動画などのメディアファイルをアップロードしただけでは、記事内でのリンクには使われますが、Wordpressシステム内では参照できません。これを参照するようにするには、メディアから新規アップロードするかプラグインなどでディレクトリをスキャンして登録する必要があります。

メディアの場所

まず、メディアが保管される場所は年月のフォルダーの配下です。年月はアップロードした日付かファイル自体のタイムスタンプかになります。別の日に同じファイルを上書きで再アップロードした場合、仕分けフォルダのパスが変更になるためファイルへのURLが変わってしまいます。また、画像ファイルがアップロードされるといくつかのサイズの画像が複数作成されます。

メディアの画像サイズ

たとえば画像ファイルをアップロードなり再スキャンなりで登録した場合、デフォルトでいくつかの画像サイズのファイルが作成されます。これらを使い分ける場合、操作時にdrupalのようにURLパスがかわるわけではないようで、いまいちよく理解できていません。scaledという文字列がファイル名に挿入されるケースもあって混乱しています。

解決方法

タイトルとスラッグ

記事へアクセスするためのURLはパーマリンクになるわけですが、記事ごとで異なるのがスラッグの箇所でパーマリンクに使われます。スラッグはタイトルをもとに置換ルールが適用されて自動生成されるためタイトル=スラッグではありません。タイトルに日本語文字列(マルチバイト文字)や使用禁止記号が使用されているとスラッグでは除去されるため、意味不明なスラッグが生成されることも多々あります。そのスラッグがパーマリンクに利用されるので他のCMSなどから移行した既存の記事へのURLは変更になってしまう可能性が高いです。まず、解決の前に決めないといけないのは、URLが変更になることを良しとするのかしないのか?です。以下はURLが変わります。

数値文字参照コードを逆変換?

タイトルは 数値文字参照コード変換で符号化された文字列をデコードして書き換えればよいのですが、正しく書き換えられるのか?いくつかのWebサイトでデコードを試してみましたが正しく変換できたのは1サイトだけでした。手動で変換するならこのサイトを使って記事を更新すれば済みます。自動ならPHPの関数でできるのかどうかテストしてみないとわかりません。
カテゴリやタグ名はエクスポートしてデコードしてインポートすればいいのかどうか?カテゴリやタグだけエクスポート/インポートするプラグインがあるのでそれを使うとして、エクスポートファイルの中身のデコード処理をしないといけないわけでちょっと大変です。
スラッグはデコードした日本語のタイトルをそのまま入力して保存すればよいのですが、日本語URLのままで良いのか?このまま意味不明な数字や英数字のままで良いとするのか?タイトルを翻訳して英語表記に変更するのか?どうするのかを決めなければなりません。日本語URLを捨てるということはこれまでの履歴をすべてリセットするということでgoogleからのリンク切れも数多く発生するためSEOの観点ではかなりのデメリットです。

原因はdrupalのエクスポート

WordPressにインポートしたXMLファイルを調べてみるとタイトルとカテゴリとタグには数値文字参照コード(16進数)が使われています。drupalのエクスポートで日本語文字列のタイトルやカテゴリやタグのXMLファイルを作成すればよいだけのようです。しかし、フォーマット設定を変更してもどうしてもだめです。そこでXMLでなくCSVにしてみました。CSVだとエクスポート結果はうまく日本語文字列になりました。

CSVはWP All Importプラグインで文字化けする

CSVをインポートするとインポート操作画面では全く問題ありませんが、インポート完了後に一覧で確認するとタイトルだけ文字化けしています。カテゴリやタグは大丈夫なようです。タイトルは日本語文字列でインポートしても内部の文字コードがあっていないためか文字化けが発生します。
タイトルとカテゴリとタグだけ上書きしてインポートできるかと試しましたがダメでした。別の記事として追加されました。
手で変換していこうと思います。

Simple Slug Translateプラグイン

Simple Slug Translateプラグインを導入してIBMの翻訳エンジンを利用してスラッグを日本語ではなく英語に翻訳して保存できます。
まれに翻訳結果が満足できないことがあり手修正が必要ですが、ほぼ問題ありません。 IBMの翻訳エンジンの学習機能などについては不明です。
Simple Slug Translateは記事を保存/更新したときに動作します。ただしクイック編集の更新では動作しません。設定の「スラッグを上書きしたい時はチェック」をONにすると手修正しても自動翻訳されてしまい元に戻りますので修正する場合はこの設定を一時的にオフにして使用します。
ドキュメントの説明と異なる点として、すでに英数字の場合は翻訳されないとなっていますが、先ほどの設定がONだと翻訳されます。同じ文字列ならそのままですが、違っていると自動翻訳された結果の文字列に変わります。
翻訳のタイミングは記事の保存/更新時なので過去記事に対して処理をする場合は翻訳される操作をするかプログラミングで自動処理するかです。
現状、スラッグは数値文字列参照コード(16進数)のタイトルの英数字箇所だけ(マルチバイト文字列が省かれたもの)もしくは記事IDの4桁の数字だけなので翻訳してもなんら変化はありません。一旦、タイトルを日本語文字列で更新してからスラッグを空欄にするかタイトルと同じにすれば日本語タイトルを英語に翻訳したスラッグが得られます。

メディアの管理

メディアの場所

メディアは年月のような仕分けをされないようにして、ファイルタイプでフォルダー分けすることにしました。気を付けないといけないのが、プラグインでその機能を追加した場合、すべてのアップロード方法で変更が有効になっている場合とそうでない場合があります。たとえば、ドラッグ&ドロップでアップロードするとプラグインが使われないなどあったりします。場所を変更できる機能とすでに記事内で使用されているURLもそれに合わせて変更してくれるプラグインがおすすめです。

メディアの画像サイズ

デフォルトで準備される画像サイズに関しては使用しているテーマにより、テーマ側で設定されていたりです。いろいろテーマを変えたりしていると多くの種類の画像サイズのファイルが作成されてしまうようです。通常はサムネイル、中、大の3種類とオリジナルで計4種類の画像ファイルがファイルシステム上に存在することになります。このとき、オリジナル以外のファイル名には画像の縦横のサイズが数値で付与されているため、そもそものサムネイルのサイズ、中サイズ、大サイズを変更すると別のファイルとして存在してしまいます。変更を繰り返していくとファイルシステム内には膨大な数の画像ファイルであふれてしまうため未使用は削除して再構築してくれるプラグインがおすすめです。

スポンサーリンク

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでフォローしよう

おすすめの記事