Concrete CMSのSEO最適化を強化!「Description to Meta」Jobプログラムのご紹介

Concrete CMSのSEO対策は貧弱
Concrete CMSには「一括SEOアップデーター」なる機能がありますが、せっかく説明文(description)が入力されていても、ここでは毎回手動でmeta descriptionを入力しなければならないため、運用の負担が大きいという課題があります。
また、Concrete CMSでコンテンツを作成する際、標準機能では説明文(description)がmeta descriptionに自動変換されないため、検索エンジンに意図しない内容が表示され、SEOの面で最適とは言えません。
この問題を解決するために開発したのが、「Description to Meta」Jobプログラムです。
このプログラムを導入することで、記事ごとの説明文(description)を自動的にmeta descriptionへコピーし、より適切な検索結果表示を実現できます。
特徴とメリット
- 検索結果の最適化:意図した記事概要が正しく表示され、クリック率(CTR)の向上が期待できる
- 手作業の軽減:「一括SEOアップデーター」での手動入力の負担を削減し、効率的な運用が可能
- 簡単な導入:Concrete CMSのJob機能を活用し、管理画面から簡単に実行できる
Jobへの登録
適宜利用や定期的なCron処理を行えるようにこの機能をJobに登録しました。
プログラムの仕様説明
このジョブは、Concrete CMSで作成されたすべてのページに対して、ページ本体に設定されている「説明文(概要)」を読み取り、それを同じページのmeta description属性にコピーする処理を行います。
処理内容の概要
-
すべてのページを取得する。
-
各ページの「概要(description)」を取得。
-
その値を、同じページの
meta_description
属性にコピー(上書き)する。-
すでに同じ値が入っているページには再設定しません(無駄な更新を避けるため)。
-
空の状態でも上書きされます(空文字
""
と説明文が違うため)。
-
-
更新したページ数をカウントし、結果として表示する。
実行プログラム copy_description_to_meta.php
<?php
namespace Concrete\Package\CopyDescriptionToMeta\Job;
use Concrete\Core\Job\Job;
use Concrete\Core\Page\PageList;
use Concrete\Core\Page\Page;
use Concrete\Core\Page\Collection\Version\Version;
class CopyDescriptionToMeta extends Job
{
public function getJobName()
{
return t('Copy Description to Meta Description');
}
public function getJobDescription()
{
return t('Copies the description attribute to the meta_description attribute for all pages.');
}
public function run()
{
$pl = new PageList();
$pl->ignorePermissions();
$pages = $pl->getResults();
$updated = 0;
foreach ($pages as $page) {
/** @var Page $page */
$description = $page->getCollectionDescription();
if ($description) {
$meta = $page->getAttribute('meta_description');
if ($meta !== $description) {
$page->setAttribute('meta_description', $description);
$updated++;
}
}
}
return t('%s pages updated.', $updated);
}
}
controller.php
<?php
namespace Concrete\Package\CopyDescriptionToMeta;
use Concrete\Core\Package\Package;
use Concrete\Core\Job\Job;
class Controller extends Package
{
protected $pkgHandle = 'copy_description_to_meta';
protected $appVersionRequired = '8.5.0';
protected $pkgVersion = '1.0.0';
public function getPackageName()
{
return t('Copy Description To Meta');
}
public function getPackageDescription()
{
return t('Copies the description attribute to the meta_description attribute for all pages.');
}
public function install()
{
$pkg = parent::install();
Job::installByPackage('copy_description_to_meta', $pkg);
}
}
ダウンロードとインストール手順
以下のリンクからファイルをダウンロードし、解凍後に packages
ディレクトリ内へ配置してください。
その後、システム設定 → Concreteの拡張 → Copy Description To Metaのインストール を実行すると、Jobに登録され、いつでも使用可能 になります。
各サイトにこのジョブのCronを設定し、1日に1回実行しています。
動作確認はConcrete CMS 8.5.19のみで行っており、他のバージョンでの動作は未確認です。
なお、本プログラムの使用により不具合が発生した場合でも、自己責任となることをご了承ください。
「説明」と「meta_description」に関する考察 〜Concrete CMSとWordPressの比較〜
Concrete CMSでの開発を通じて興味深く感じたのは、「ページの説明(概要)」と「meta description」が異なる扱いをされている点です。
Concrete CMSでは、ページ作成時に入力される「説明」は、CollectionDescription
というコアのプロパティとして扱われており、ページの基本情報として組み込まれています。これは、ページの概要を明示的に示すものであり、システム全体で自然に活用される設計になっています。
一方、「meta description」はSEO対策において重要であるにもかかわらず、Concrete CMSではカスタム属性(Attribute)として別途定義・設定する必要があります。つまり、両者はシステム上まったく別物として管理されており、自動的に連携されることはありません。
これにより、例えば「ページの説明」を入力しても、それが検索エンジンの検索結果に反映される meta description
として使われる保証はなく、別途登録・管理する手間が発生します。ページ数が多いサイトでは、こうした繰り返し作業が運用上の負担となり、情報の重複や不一致も起こりやすくなります。
WordPressとの比較
この点について、WordPressとの違いが際立ちます。
WordPressでは、meta description
はコア機能には含まれていませんが、Yoast SEO や All in One SEO Pack などのプラグインを導入することで、投稿や固定ページに簡単に「meta description」を設定できるようになります。
これらのプラグインは、meta description が未入力の場合は、投稿本文の冒頭や「抜粋(Excerpt)」を元に自動生成する仕組みも備えています。つまり、「説明(概要)」と「meta description」が実用上リンクしやすい設計になっており、ユーザーに負担をかけずSEOに反映されやすい構造です。
Concrete CMSとは異なり、WordPressではこうした処理がユーザー寄りの仕組みとして整備されているため、特に非開発者にとって扱いやすいと言えるでしょう。
まとめ
Concrete CMSは柔軟性が高く、構造的にも明快ですが、「説明」と「meta description」の連携については自動化されていないため、実運用では工夫が求められます。一方WordPressは、プラグインの活用により、meta description の管理が容易にできるよう設計されており、より運用者の視点に近い設計思想が感じられます。
CMSとしての設計思想の違いが、こうした小さな「説明文」の扱いにまで現れていることは、非常に興味深い点だと感じました。