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

2025/05/13
Concrete CMSの標準機能では、説明(description)がmeta descriptionに変換されない問題を解決するための「Description to Meta」Jobプログラムを開発しました。これにより、記事概要を自動でmeta descriptionへコピーし、検索結果の表示を最適化できます。SEO対策と運用効率を向上させるための便利なツールです。

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属性にコピーする処理を行います。

処理内容の概要

  1. すべてのページを取得する。

  2. 各ページの「概要(description)」を取得。

  3. その値を、同じページのmeta_description属性にコピー(上書き)する。

    • すでに同じ値が入っているページには再設定しません(無駄な更新を避けるため)。

    • 空の状態でも上書きされます(空文字 "" と説明文が違うため)。

  4. 更新したページ数をカウントし、結果として表示する。

実行プログラム 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のみで行っており、他のバージョンでの動作は未確認です。

なお、本プログラムの使用により不具合が発生した場合でも、自己責任となることをご了承ください。

ダウンロードzip


「説明」と「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 SEOAll in One SEO Pack などのプラグインを導入することで、投稿や固定ページに簡単に「meta description」を設定できるようになります。

これらのプラグインは、meta description が未入力の場合は、投稿本文の冒頭や「抜粋(Excerpt)」を元に自動生成する仕組みも備えています。つまり、「説明(概要)」と「meta description」が実用上リンクしやすい設計になっており、ユーザーに負担をかけずSEOに反映されやすい構造です。

Concrete CMSとは異なり、WordPressではこうした処理がユーザー寄りの仕組みとして整備されているため、特に非開発者にとって扱いやすいと言えるでしょう。

 まとめ

Concrete CMSは柔軟性が高く、構造的にも明快ですが、「説明」と「meta description」の連携については自動化されていないため、実運用では工夫が求められます。一方WordPressは、プラグインの活用により、meta description の管理が容易にできるよう設計されており、より運用者の視点に近い設計思想が感じられます。

CMSとしての設計思想の違いが、こうした小さな「説明文」の扱いにまで現れていることは、非常に興味深い点だと感じました。


コメント欄を読み込み中