運営堂さんサイトリニューアルにあたって苦労したところを書き残しておくシリーズの4つ目です。
WordPressにはブログ内検索機能がありますが、あくまでブログ用のデータベースの中をさらって結果を返してきているだけなので、正式な検索用途として作り込まれているわけではない簡易的なものであることを忘れてはいけません。
以下は、それを忘れ去っていたために、しばらく悶々とした日々を送った私の夏の思い出です。
「ゴルゴ問題」発覚の経緯
だいたいWordPress案件をやる時は、必要なテンプレートが一通り揃ったところで、search.phpがちゃんと適用できているか試すために適当な語句でブログ内検索をかけたりしますよね。
で、運営堂さんのサイトで、適度に結果としてでてきそうな言葉として、こんな感じでチェックしていたのです。
大丈夫そうだなーと思ってスクロールしていったら、「ゴルゴ」の検索結果にこの記事が。
- 「セッション(数)」とは何ですか? ・・・???
- 事務所移転のお知らせ。 ・・・???
なんでこの記事が「ゴルゴ」で引っかかってくるんじゃい!
たしかにあのゴルゴのことを指していた記事もヒットしていますが、明らかにゴルゴ関係ない記事も検索結果に出てきてしまっているということに、制作も終盤になって気付いてしまったのです。
リンク先を見ていただくとわかりますが、「ゴルゴ」なんてどこにも書いてありません。
見なかったことにしようかと思いました。
でも、できなかったので、とりあえずTwitterにぼそりと。
WordPress標準のサイト内検索機能で、あきらかにそんな単語入ってない記事が複数検索結果に上がってくる現象に遭遇しているのだけど、原因がわからない。全プラグインOFF、テーマデフォルトでも同じ。謎が謎を呼んでいる状態。
— Kさん(のむらけい) (@mypacecreator) August 30, 2017
そしたら、すぐに有益な情報が返ってきました。
WordPressの検索よくわからんけどざっとソース見たところ、WP_Site_Query::get_search_sql() あたりでやってて SQL に単純な LIKE ひいてるだけっぽい。ここに BINARY 入れるだけでも違うかも?
— むりどん🐶 (@sqm) August 30, 2017
そうか、自分で作ったWordPressテーマやプラグインだけ見ててもだめだ、コアとMySQLでどんな処理をしてるのか見てやらないと。ありがとう@sqmさん!
ということで、発行されてるクエリを確認してみることにしました。
この手のデバッグには、Debug This プラグインがお手軽です。
Debug This – WordPress プラグイン | WordPress.org 日本語
Debug This プラグインを有効化しているとツールバーのところに[Debug This]というのが増えますので、例の「ゴルゴ」の検索結果ページで[Debug This]を押してみます。
すると、こんな感じで投稿オブジェクトの中身を一気に確認できます。
ブログ内検索のSQLはこのあたりですね。
たしかに、投稿データをMySQLのLIKE句で検索しています。
MySQLのLIKE句は、「大文字・小文字、清音・濁音・半濁音」を区別しない、ということで…(※照合順序はutf8mb4_unicode_ci )
つまりどういうことかというと、「ゴルゴ」で検索すると「こるこ」とか「こるご」とか「ごるこ」などのワードでも引っかかっていた、ってことでした。
例の記事を確認してみますと、
数日、数週間、または数か月という期間で起こることもあります。
制作会社さんからすると数あるタグの中の1つという感覚なのでここで行き違いが起こることが多いです。
そういうことかー!
「起こること」という言葉の「こるこ」の部分が、「ゴルゴ」と一致判定されていたのでした。
おおよその原因がわかったことで、同じような問題に遭遇している人の情報を見つけることができました。
そしたら芋づる式にいろいろわかりました。以下まとめです。
■どう対策するか?
→LIKE句検索を、LIKE BINARY句検索に変更してみました。
変わりました。
検索結果も安定しました。
■前のサイトではこの問題が起きていなかったっぽいが?
→MySQLのバージョン・照合順序の違い(utf8_general_ci → utf8mb4_unicode_ci)と思われます。
■これによる弊害
→全角・半角など完全一致でないと検索できなくなるのがネック。
(例)「iphone」「IPHONE」「iphone」、「さくら」「サクラ」などが区別される
とりあえず今は完全一致にしておりますが、今後の運用で、やはり「完全一致では使い勝手が悪い!”Google Analytics”と”google analytics”は同じものとして扱ってくれよ!」という話になってくれば、標準仕様のLIKE句検索に戻すかもしれません。
でも、仕組みを知っておけば今後悩まなくて済みますね。
これが運営堂さんサイトリニューアルにおける「ゴルゴ問題」の顛末でした。
以上、今回のリニューアルプロジェクトで苦労した4点を書き残しました。
かなりニッチな状況だと思いますので、これをお読みの方々に役に立つかどうかはまったくもって不明ですが、私自身はものすごく勉強になりました。
特に、
- 他社さんが普段どういう感じでプロジェクトを進めたり、どういうコーディング・実装をしているのか知れたこと
- 今まで先人たちが散々「困ったらコアを読め」と啓蒙してきたように、ググるのに時間使うより、結局コアファイルを検索したほうが早いという経験をできたこと
- なんとか自分もそこまでのレベルにようやくたどり着いていたことに気づけたこと
は、今後の私のWordPressライフにおいて非常に大きな糧となったと思います。
・・・と、締めくくろうとしていますが、実はまだAMP, PWAなどへの対応や、自作プラグインの機能拡張などといった残タスクがいくつもあります。
特にPWAについてはまだわからないことだらけなので、運営堂さんサイトを実験台にさせてもらいながら、またいろいろ学んでいきたいと思っています。
そしてさらにもう1つ。
今回導入したメールフォームについて、ぜひ紹介したいと思っています。これはかなりのこだわりの逸品なので!
しばしお待ちください。
今年に入ってパッタリ更新が止まっていましたが、WordFes前に更新できてよかった。。。