背景
ケチってロリポップのライトプランのため、WordPressの表示が遅いと常々感じていた。
とりあえず簡単にできる速度効率化から始めようと思いプラグインを見直してみると、
噂によると、All in One SEO PackというSEO用のプラグインは遅いことで有名らしい。
このブログはSimplicityを利用していて、
このテーマにはデフォルトで似たようなSEO対策機能があるようなので、
All in One SEO Packは削除してみることにした。
目標
All in One SEO Packに入力済みの値をSimplicityのSEO設定欄に移行する。
現状、投稿のDescription(Google検索結果でページタイトルの下に表示される説明文)を、
All in One SEO Packの欄:青枠にのみ入力している。
SimplicityのほうのSEO設定入力欄:赤枠は空。
公式では非対応![]()
All in One SEO Packからの切り替えについて Simplicityの特徴 › フォーラム › Simplicity2に関する話題何でも › All in One SEO Packからの切り替えについて このトピックには6件の返信 「All in One SEO Packのデータを引き継ぐ」作業を一括でできる設定があるのでしょうか?
記事ひとつひとつ、入力しなおす方法しかないのでしょうか?
Simplicityにはそのような機能はないです。
これまでAll in One SEO Packを利用してきて、既に多数の記事のメタディスクリプションなどを入力している場合は、そのままプラグインを利用するのが最も手っ取り早いかと思います。
「All in One SEO Packのデータを引き継ぐ」作業を一括でできる設定があるのでしょうか?
記事ひとつひとつ、入力しなおす方法しかないのでしょうか?
Simplicityにはそのような機能はないです。
これまでAll in One SEO Packを利用してきて、既に多数の記事のメタディスクリプションなどを入力している場合は、そのままプラグインを利用するのが最も手っ取り早いかと思います。
ということなので、機能がないなら自分でやるしかないっ!
解決策
下記SQLを実行して、meta_description
に_aioseop_description
の値を挿入する。
UPDATE wp_postmeta,
(SELECT post_id, meta_value as aioseop_meta_value FROM wp_postmeta WHERE meta_key = "_aioseop_description") AS aioseop
SET wp_postmeta.meta_value = aioseop.aioseop_meta_value
WHERE wp_postmeta.post_id = aioseop.post_id
AND wp_postmeta.meta_key = "meta_description"
wp_postmeta
はそれぞれご自身の環境に合わせてください
解説
WordPressは使うけどSQLはあまり使わない人向け解説。
1~2行目
「wp_postmetaというテーブルと、wp_postmetaテーブルからmeta_keyが_aioseop_descriptionのもののみ抜き出したaioseopというテーブルを使って、更新」
UPDATE wp_postmeta,
(SELECT post_id, meta_value as aioseop_meta_value FROM wp_postmeta WHERE meta_key = "_aioseop_description") AS aioseop
wp_postmeta
テーブルでmeta_key
が_aioseop_description
のものを抜き出したサブクエリ (※1)にaioseop
テーブルと名付ける(※2)。
※1 既存のテーブルから必要なもののみを抽出して、今回のSQLの実行時だけ使う仮想テーブルをつくるイメージ
※2 同じテーブルを2度参照する際は別名をつける必要がある。

元は同じテーブルを参照していますが、別名をつけることで、下記の名前でそれぞれテーブルを扱えます。
wp_postmeta
テーブル…転記先aioseop
テーブル…転記元
4~5行目
「meta_descriptionという列だけが更新の対象で、2つのテーブルはpost_idが一緒」
WHERE wp_postmeta.post_id = aioseop.post_id
AND wp_postmeta.meta_key = "meta_description"
転記先テーブルと転記元テーブルでそれぞれ同じpost_idを持つ行を紐づけ、meta_key
がdescription
のもののみ対象にする。
3行目
「wp_postmetaのmeta_valueにaioseopの値をセットして」
SET wp_postmeta.meta_value = aioseop.aioseop_meta_value
4行目で行の紐づけを行い必要な行のみを対象にしたので、
転記元のmeta_value列を、転記先のmeta_valueにSet(=値を挿入)する。
確認
下記のSQLを実行して目でちらちらーっと確認した限りでは、正しく移せてそう。
(それ以上の確認はしていないので、同じことを試される場合はあくまで自己責任で)
SELECT * FROM `wp_postmeta` WHERE meta_key = "meta_description" OR meta_key = "_aioseop_description" ORDER BY `wp_postmeta`.`post_id` ASC
メモ
メタタグのデータは、データベースのwp_postmeta
に入っている。
Discription
にかかわらず、メタタグはすべてここに格納されていて、meta_key
で、メタタグの種類を指定している。
- wp_postmetaテーブルのカラム
meta_id
post_id
meta_key
meta_value
All in One SEO Packのディスクリプションも、SimplictyのSEO設定のメタディスクリプションも、例に倣って上記テーブルに格納されている。meta_key
はそれぞれ下記の通り。
- All in One SEO Pack –
_aioseop_description
- Simplicity –
meta_description
※ meta_description
は、現在有効となっている投稿すべてで存在しているが、_aioseop_description
は、入力があった投稿のみINSERTされている
各記事を更新するたびにPOST IDが新しくなるが、
wp_postmetaテーブルに保存されているpost_idは、最新のものっぽいので、過去のPOST IDのメタタグがそれぞれ保存されているわけではないらしい
注意事項
- くれぐれもデータベースはバックアップとってから。
- 今回はディスクリプション欄のみ移行しましたが、タイトルも同じ方法でできる(と思います)。
- SEOのデータを移行したら、プラグインの設定でちゃんとSimplicityのDescriptionを使うように設定
- 外観 > カスタマイズ > SEO > 投稿ページにメタディスクリプションを挿入 にチェック
コメント