a-blog cmsインストール時の初期状態について

目次

  1. ようこそa-blog cmsへ
  2. ログインするには
  3. インストール時のサイトマップについて
  4. テーマについて
  5. ディレクトリー構造について

ようこそa-blog cmsへ


数あるCMSの中からa-blog cmsをインストールしていただきありがとうございます。「インストールしたはいいけど何から始めたらいいかわからない」「短期間でもちゃんと理解できるか不安」そのような方に向けて、ここではインストール直後のa-blog cmsの仕様についてご紹介します。


ログインするには


まずはサブカラム右下にある [login] ボタンをクリックしてください。 もしくは、表示されているURLの語尾に /login を追記しても同じページが表示されます。

例)https://example.com/login


[login]ボタン

次に「ユーザーID/メールアドレス」「パスワード」の各欄に管理者が発行した情報を入力し、[ログイン] ボタンをクリックします。


ログイン画面

「ユーザーIDまたはパスワードが違います。」と表示されたら?


[ログイン] ボタンをクリックした時に「ユーザーIDまたはパスワードが違います。」と表示された場合は、以下のような原因が考えられます。


  • メールアドレス、パスワードが半角英数字で入力されていない
  • 意図しないスペースが入っている

パスワードを忘れてしまったら?


パスワードを忘れてしまった場合は、パスワードを再発行しましょう。

[パスワードをお忘れですか?] をクリックして登録してあるメールアドレスを入力すると、パスワードを変更するためのリンクと新しいパスワードがメールで送られてきます。メールの内容に従って新しいパスワードでログインしてください。


これでログインは完了です。

ログイン中は、ヘッダーの直後とフッターの直前に灰色の管理ボックスが表示されます。サイトの運営は主にこの管理ボックスを使って行っていきます。



またヘッダー直後の管理ボックスにある [ログアウト] というボタンをクリックすることで、ログイン前の状態に戻ることもできます。


インストール時のサイトマップについて


a-blog cmsはインストール時より、実際に企業のサイトを制作した場合の仕上がりの例として、あらかじめ複数のサンプル記事が入力されています。このサイトは下図のような構造になっています。



a-blog cmsでは、これらの階層に関わる情報を3種類に区別しています。それが「ブログ」「カテゴリー」「エントリー」です。


ブログ
全てのエントリーとカテゴリーを含むサイトの最大単位をブログといいます。サンプルサイトでは全てのエントリーとカテゴリーを「a-blog cms サンプルサイト」というブログで総括しています。

カテゴリー
複数のエントリーをジャンル別に分類する単位をカテゴリーといいます。サンプルサイトでは「お知らせ」「会社概要」「製品情報」などが当てはまります。
また、製品情報カテゴリーのように、カテゴリー中でさらに「家庭用製品」「業務用製品」とカテゴリーを分けることもできます。これらは「親カテゴリー」「子カテゴリー」と区別されます。

エントリー
ページの最小単位をエントリーといいます。サイトを更新する際には、主にこのエントリーを新規作成してページを追加します。

子カテゴリーを作成して階層を分けることもできますが、ブログの下の階層にさらに子ブログを設置することもできます。規模の大きさや用途によってカテゴリーで分けるのかブログで分けるのかを判断していきましょう。
またサイトの構成次第では、カテゴリーを持たないエントリーを用意することもあります。この際でも、カテゴリーがエントリーを内包し、ブログがカテゴリーを内包するような主従関係が逆転することはありません。


テーマについて


テーマ
テンプレート(HTMLファイル)やイメージファイル(画像ファイル)、CSSファイル、JavaScriptファイル等、サイトを構成するファイルを1つのフォルダにまとめたものをテーマと呼びます。a-blog cmsでは、テーマごとにサイトの見た目や機能を設定することができます。

2022年6月現在では、デフォルトのテーマとして「site」「beginner」「utsuwa」「blog」「develop」を用意しています。また、各場合の初期テーマは以下のように設定されています。


  • a-blog cmsをインストールしている場合:セットアップ時に選択したテーマ
  • a-blog cms.ioで体験している場合:beginner

テーマを変更するには?


テーマはブログごとに設定します。
テーマを変更、もしくは現在適応されているテーマの確認は、以下の手順で行います。


  1. 管理ボックスの [管理ページ] をクリック
  2. サイドメニューの [コンフィグ] > セット名"デフォルト"の[コンフィグ] をクリック
  3. コンフィグ一覧内 [テーマ設定] をクリック



テーマ設定画面で「テーマ ディレクトリ名」という項目に表示されているテーマが現在適応されているテーマです。こちらで任意のテーマを選択し、保存ボタンをクリックすることでテーマの変更ができます。



チュートリアルでは、主にテーマ「beginner」を使います。「テーマ ディレクトリ名」を「beginner」に設定し、保存をしておきましょう。


ディレクトリー構造について


a-blog cmsサイトの各ページは、複数のテンプレートファイルによって構成されています。


テンプレートファイル
ページを構成するHTMLファイルのことです。しばしば「テンプレート」と省略します。基本的なテンプレートとして、トップページに設定する _top.html 、一覧ページに設定する index.html 、詳細ページに設定する _entry.html があります。

ファイル名先頭のアンダーバーの有無について


a-blog cmsでは _top.html や _entry.html など、テンプレートファイル名の先頭にアンダーバーがつく場合があります。これはファイル名を含んだURLである「https://example.com/top.html」や「https://example.com/index/entry.html」へのアクセスを無効にするためのものです。詳しくは「直接表示させないテンプレートを指定する | a-blog cms developers」をご覧ください。


各テーマにおいて設定されているテンプレートは、テーマ設定画面で確認することができます。「テンプレート選択ファイル(template.yaml)の値を優先する」にチェックがある場合はテンプレート選択ファイル template.yaml 内に書かれた指示通りにテンプレートが適応され、チェックがない場合は管理画面上の入力欄から直接テンプレートを指定することができます。


チェックがある場合に適応されるテンプレート

チェックがある場合に適応されるテンプレート


チェックがない場合に適応されるテンプレート

チェックがない場合に適応されるテンプレート


インストール時には、先ほどのサイトマップに掲載した項目がそれぞれ以下のテンプレートで表示されています。



また各ページにおいて表示されているページのテンプレートは、管理ボックスから確認することができます。例えばトップページの管理ボックスには、「現在表示中のテンプレート:/themes/site2020/_top.html」と表記されています。


現在表示中のテンプレート:/themes/site2018/_top.html

a-blog cms × 構造化データ

みなさん、サイトのリッチリザルト対応はしていますでしょうか?
対応することで、Googleの検索結果にリッチな表現で表示できます。これにより、他の検索結果ページよりも目を引くような表示でユーザーの目を引き、アクセスしやすいサイトになり、間接的なSEO向上が見込めるというメリットがあります。

動的コンテンツになると特に実装が難しそうというイメージもありますが、a-blog cms ならモジュールとカスタムフィールドを組み合わせていけば基本的にはHTMLのマークアップのみで実装可能です。
※リッチリザルトについての詳細は、Google 検索がサポートする構造化データ マークアップ | Google 検索セントラル  |  ドキュメント  |  Google for Developers でご確認いただけます。

公式テーマに入っている構造化データの紹介

a-blog cms の公式標準テーマ(siteテーマなど)には、あらかじめパンクズリスト構造化データが実装されています。この実装により、Googleの検索エンジンは対象ページの階層表示を検索結果に表示できます。


パンクズリスト表示例


階層表示の出力には、Topicpathモジュールを使用しています。

【例)themes/site/include/head/structured-data.html(a-blog cms Ver.3.1.3 の場合)】

<!-- BEGIN_MODULE Topicpath id="モジュールID" -->
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement":
  [
  <!-- BEGIN blog:loop --><!-- BEGIN glue -->,<!-- END glue -->{
    "@type": "ListItem",
    "position": {sNum},
    "item":
    {
    "@id": "{url}",
    "name": "{name}"
    }
  }<!-- END blog:loop --><!-- BEGIN category:loop --><!-- BEGIN glue -->,<!-- END glue -->
  {
    〜 割愛(blog:loopの中と同様の記述) 〜
  }<!-- END category:loop --><!-- BEGIN entry --><!-- BEGIN glue -->,<!-- END glue -->
  {
    〜 割愛(blog:loopの中と同様の記述) 〜
  }<!-- END entry -->
  ]
}
</script>
<!-- END_MODULE Topicpath -->

Topicpathモジュールにあらかじめ用意されている変数のみを使用しており、特別なカスタマイズは行っていません。

このように、パンクズリストに限らず、a-blog cms で標準実装されているモジュールを使用して、ほとんどの構造化データを実装できます。

記事の構造化データ実装方法紹介

比較的簡単に実装可能な記事の構造化データによるリッチリザルト対応方法を紹介します。

ニュース、ブログ、スポーツの記事のページに Article 構造化データを追加すると、Google がウェブページの詳細を理解し、Google 検索やその他のサービス(Google ニュースや Google アシスタントなど)の検索結果で、その記事のタイトル テキスト、画像、日付情報を適切に表示できるようになります。

記事(Article)の構造化データ | Google 検索セントラル | ドキュメント | Google for Developers

上記のように、お知らせやブログのエントリー詳細ページに追加できるのが記事の構造化データです。これを実装することで、Google検索や関連サービスの検索結果でサムネイルが表示されるようになります。


NewsArticle例(2023/10現在検索結果)


記事の構造化データの項目は大きく6つです。
全ての項目が「推奨」項目となります。


@type ニュース記事の場合は NewsArticle、ブログ記事の場合は BlogPosting、それ以外または特定のカテゴリーではないような記事の場合は Article を指定
headline 記事タイトル
image 画像URLを指定
datePublished 記事公開日
dateModified 記事更新日
author 記事の作成者情報(タイプ、名前、著者の情報が載っているURL)を指定
author についての注意点
タイプ(author.@type)とURL(author.url)について、推奨項目となっていますが、Googleのガイドラインにて「使用することを強くおすすめします。」と記載されているので、できれば指定することが望ましいようです。※Googleのガイドライン > 記事(Article)の構造化データ 作成者のマークアップのベストプラクティス
image についての注意点
推奨項目となっていますが、Googleのガイドラインにて「すべてのページに画像を少なくとも 1 つ含める必要があります」と記載されているので、できれば画像を挿入するようにすることが望ましいようです。※Googleのガイドライン > 記事(Article)の構造化データタイプの定義

※記事の構造化データの詳細については、記事(Article)の構造化データ | Google 検索セントラル | ドキュメント | Google for Developers でご確認いただけます。

記事の構造化データ実装例

記事詳細は基本的に Entry_Bodyモジュール を使用していると思いますので、構造化データも Entry_Bodyモジュールの変数を使用して作成していきます。

【 _entry.html 】

@extends("/_layouts/継承元ファイル名.html")

@section(head-js)
@parent
<!-- GET_Rendered id="ld_json_article_entry" -->
@endsection

@section("main")
@include("/include/entry/body.html")
@endsection
【 include/entry/body.html 】

<!-- BEGIN_MODULE Entry_Body id="モジュールID" -->
<!-- BEGIN notFound -->〜割愛〜<!-- END notFound -->
<!-- BEGIN entry:loop -->
〜記事内容のページ出力割愛〜

<!-- BEGIN_SetRendered id="ld_json_article_entry" --><script type="application/ld+json">
{
  "headline": "{title}",<!-- BEGIN_MODULE Ogp -->
  "image": [
    "%{HTTP_MEDIA_ARCHIVES_DIR}{image}[resizeImgFit(304,171)]",
    "%{HTTP_MEDIA_ARCHIVES_DIR}{image}[resizeImgFit(260,195)]",
    "%{HTTP_MEDIA_ARCHIVES_DIR}{image}[resizeImgFit(224,224)]"
  ],<!-- END_MODULE Ogp --><!-- BEGIN date:veil -->
  "datePublished": "{date#Y}-{date#m}-{date#d}T{date#H}:{date#i}:{date#s}+09:00",<!-- END date:veil --><!-- BEGIN_IF [{date#Y}{date#m}{date#d}/neq/{udate#Y}{udate#m}{udate#d}] --><!-- BEGIN udate:veil -->
  "dateModified": "{udate#Y}-{udate#m}-{udate#d}T{udate#H}:{udate#i}:{udate#s}+09:00",<!-- END udate:veil --><!-- END_IF --><!-- BEGIN userField:veil --><!-- BEGIN userField -->
  "author": [{
    "name": "{fieldUserName}",<!-- BEGIN fieldUserUrl -->
    "url": "{fieldUserUrl}",<!-- END fieldUserUrl -->
    "@type": "Person"
  }],<!-- END userField --><!-- END userField:veil -->
  "@type": "NewsArticle",
  "@context": "https://schema.org"
}
</script><!-- END_SetRendered -->

<!-- END entry:loop -->
〜ページャー割愛〜
<!-- END_MODULE Entry_Body -->

※複数の著者(author)を設定する場合は、カスタムフィールドグループで著者の入力欄を実装する必要があります。

※SetRendered を使用して entry:loop 内で出力した JSON を headタグ内で読み込んでいます。SetRendered についての詳細は テンプレートの変数化 | テンプレート | ドキュメント | a-blog cms developer でご確認いただけます。

※画像は校正オプションでアスペクト比 16x9、4x3、1x1 のサイズを生成しています。設定値は解像度が 50,000px 以上となるようにしています。メイン画像を読み込むのにOGPモジュールを使用しています。

イベント構造化データ実装方法紹介

2023年10月現在、イベントの開催地がオンラインで行われる機会が増えたことから、構造化データのオプションも増加し、実装がより複雑になりました。イベントに関しては、複数の専用カスタムフィールドを用意して実装する必要があるため、「難しめの構造化データ」の実装方法として紹介します。

Google のイベント機能を活用すると、ユーザーは Google 検索結果や他の Google サービス(Google マップなど)からイベントを見つけ、参加しやすくなります。

イベント(Event)の構造化データ | Google 検索セントラル | ドキュメント | Google for Developers

上記のように、イベント構造化データを実装すると Googleサービスで強調表示してくれるため集客などにも繋げやすくなるのではないでしょうか。

イベント構造化データの項目は大きくわけると11項目です。


@type 必須 Event
name 必須 イベント名
eventStatus 推奨 5つのステータス(開催予定や中止など)の中から指定
※未設定の場合は EventScheduled(開催予定)としてみなされる
eventAttendanceMode 推奨 オフラインかオンラインか両方かを選択
※未設定の場合は OfflineEventAttendanceMode(オフライン)としてみなされる
startDate 必須 開始日時
endDate 推奨 終了日時
description 推奨
概要
※イベント内容について記載、日時や場所は専用項目で指定する
image 推奨
イベントの画像やロゴ
location 必須 イベント開催場所
performer 推奨 出演者の情報(グループか個人を指定、名前)
organizer 推奨 主催者の情報(組織か個人を指定、名前、主催者のURL)
offers 推奨 チケット情報(販売中などのステータス、価格情報、など...)
previousStartDate 推奨 イベントの日程が変更された場合、変更前に予定されていたイベント開始日を設定
startDate, endDate についての注意点
時間がわからない場合は時間指定しないでください。オンラインイベントの場合は開催時間の最後に日本の場合(JST)のUTC/GMTタイムオフセット「+09:00」が必須となります。

※イベント構造化データの詳細は、イベント(Event)の構造化データ | Google 検索セントラル  |  ドキュメント  |  Google for Developers でご確認いただけます。

イベント構造化データ実装例

1イベント1エントリーで作成した場合を想定し、実装例を出しました。使用するモジュールは Entry_Bodyモジュール です。
イベントに関しては、Entry_Bodyモジュールの標準変数だけでは情報不足なため、いくつかのカスタムフィールドを用意する必要があります。

エントリー編集ページへのカスタムフィールド追加

編集ページ側にエントリーのカスタムフィールドを追加します。
例)/admin/entry/field.html

イベント基本情報
<table class="acms-admin-table-admin-edit acms-admin-margin-bottom-mini">
  <tr>
    <th style="width: 130px;">イベント状況</th>
    <td>
      <select name="event_status">
        <option value="EventScheduled" {event_status:selected#EventScheduled}>開催</option>
        <option value="EventCancelled" {event_status:selected#EventCancelled}>中止</option>
        <option value="EventMovedOnline" {event_status:selected#EventMovedOnline}>オフラインからオンラインに変更</option>
        <option value="EventPostponed" {event_status:selected#EventPostponed}>延期だが日程未定</option>
      </select>
      <input type="hidden" name="field[]" value="event_status">
    </td>
  </tr>
  <tr>
    <th style="width: 130px;">開催日時<i class="acms-admin-icon-tooltip js-acms-tooltip" data-acms-tooltip="秒数は自動的に開始:00、終了:59として出力します"></i></th>
    <td>
      <table class="acms-admin-table-admin-edit">
        <tr>
          <th style="width: 110px;">設定</th>
          <td>
            <select name="event_time_status">
              <option value="" {event_time_status:selected#}>---</option>
              <option value="start_time_undecided" {event_time_status:selected#start_time_undecided}>イベント開始時間未定</option>
              <option value="all_day" {event_time_status:selected#all_day}>終日イベント</option>
            </select>
            <input type="hidden" name="field[]" value="event_time_status" />
          </td>
        </tr>
        <tr>
          <th style="width: 110px;">開始日時</th>
          <td>
            <p class="acms-admin-margin-none">※エントリー日付で設定</p>
          </td>
        </tr>
        <tr>
          <th style="width: 110px;">終了日時<i class="acms-admin-icon-tooltip js-acms-tooltip" data-acms-tooltip="終日イベントの場合は入力不要"></i></th>
          <td>
            <input type="text" name="event_end_date" value="{event_end_date}" class="acms-admin-form-width-mini acms-admin-margin-right-mini js-datepicker2" placeholder="YYYY-MM-DD">
            <input type="text" name="event_end_time" value="{event_end_time}" class="acms-admin-form-width-mini js-timepicker" placeholder="HH:MM:SS">
            <input type="hidden" name="field[]" value="event_end_date">
            <input type="hidden" name="field[]" value="event_end_time">
          </td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <th style="width: 130px;">開催場所 <span class="acms-admin-label acms-admin-label-danger">必須</span></th>
    <td>
      <select name="event_attendance_mode">
        <option value="" {event_attendance_mode:selected#}>未定</option>
        <option value="OfflineEventAttendanceMode" {event_attendance_mode:selected#OfflineEventAttendanceMode}>オフライン</option>
        <option value="OnlineEventAttendanceMode" {event_attendance_mode:selected#OnlineEventAttendanceMode}>オンライン</option>
        <option value="MixedEventAttendanceMode" {event_attendance_mode:selected#MixedEventAttendanceMode}>オフラインとオンラインの両方</option>
      </select>
      <input type="hidden" name="field[]" value="event_attendance_mode">
    </td>
  </tr>
  <tr>
    <th style="width: 130px;">オフライン</th>
    <td>
      <table class="acms-admin-table-admin-edit">
        <tr>
          <th style="width: 110px;">会場名</th>
          <td>
            <input type="text" name="event_location_name" value="{event_location_name}" class="acms-admin-form-width-full">
            <input type="hidden" name="field[]" value="event_location_name">
          </td>
        </tr>
        <tr>
          <th style="width: 110px;">会場住所<i class="acms-admin-icon-tooltip js-acms-tooltip" data-acms-tooltip="開催場所がオフラインの場合必須"></i></th>
          <td>
            <input type="text" name="event_location_address" value="{event_location_address}" class="acms-admin-form-width-full" placeholder="〇〇県〇〇市〜">
            <input type="hidden" name="field[]" value="event_location_address">
          </td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <th style="width: 130px;">オンライン</th>
    <td>
      <table class="acms-admin-table-admin-edit">
        <tr>
          <th style="width: 110px;">開催URL<i class="acms-admin-icon-tooltip js-acms-tooltip" data-acms-tooltip="開催場所がオンラインの場合必須"></i></th>
          <td>
            <input type="text" name="event_location_offline_url" value="{event_location_offline_url}" class="acms-admin-form-width-full" placeholder="https://~">
            <input type="hidden" name="field[]" value="event_location_offline_url">
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
イベント詳細情報
<table class="acms-admin-table-admin-edit acms-admin-margin-bottom-mini">
  <tr>
    <th style="width: 130px;">イベント概要</th>
    <td>
      <textarea name="event_description" class="acms-admin-form-width-full" rows="5">{event_description}</textarea>
      <input type="hidden" name="field[]" value="event_description">
    </td>
  </tr>
  <tr>
    <th style="width: 130px;">メイン画像</th>
    <td class="js-media-field">
      <div class="js-droparea" data-thumbnail="{main_image@thumbnail}" data-type="image" data-thumbnail-type="{main_image@type}" data-width="200px" data-height="200px"></div>
      <p class="js-text acms-admin-text-danger" style="display:none">許可されていないファイルのため挿入できません。</p>
      <div class="acms-admin-margin-top-mini">
        <button type="button" class="js-insert acms-admin-btn" data-type="image">メディアを選択</button>
      </div>
      <input type="hidden" name="main_image" value="{main_image}" class="js-value">
      <input type="hidden" name="field[]" value="main_image">
      <input type="hidden" name="main_image:extension" value="media">
      <p class="acms-admin-margin-none acms-admin-margin-top-mini">※推奨サイズ:幅720px以上</p>
    </td>
  </tr>
</table>
performer, organizer, offers(出演者情報、主催者情報、チケット情報)について
推奨プロパティなので上記実装例からは除外しました。実際に実装する際は、イベントページに合わせて項目追加してみてください。
previousStartDate(開催日変更をした場合の、変更前の開始日)について
イベントの日程が変更された場合、変更前に予定されていたイベント開始日を設定できる previousStartDate という項目もありますが、実装するとより複雑化するため推奨プロパティということもあり、上記実装例からは除外しました。それに伴い eventStatus からは EventRescheduled(イベント日時を変更した)の選択肢を無くしています。

エントリー詳細ページ

【 _entry.html 】

@extends("/_layouts/継承元ファイル名.html")

@section(head-js)
@parent
<!-- GET_Rendered id="ld_json_event_entry" -->
@endsection

@section("main")
@include("/include/entry/body.html")
@endsection
【 include/entry/body.html 】

<!-- BEGIN_MODULE Entry_Body id="モジュールID" -->
<!-- BEGIN notFound -->〜割愛〜<!-- END notFound -->
<!-- BEGIN entry:loop -->
〜イベント内容のページ出力割愛〜

<!-- BEGIN_SetRendered id="ld_json_event_entry" --><!-- BEGIN_IF [{event_attendance_mode}/nem] --><script type="application/ld+json">
{
  "name": "{title}",<!-- BEGIN_IF [{event_status}/nem] -->
  "eventStatus": "https://schema.org/{event_status}",<!-- END_IF -->
  "eventAttendanceMode": "https://schema.org/{event_attendance_mode}",<!-- BEGIN_IF [{event_time_status}/eq/all_day] -->
  "startDate": "{date#Y}-{date#m}-{date#d}",
  "endDate": "{date#Y}-{date#m}-{date#d}",<!-- ELSE_IF [{event_time_status}/eq/start_time_undecided] -->
  "startDate": "{date#Y}-{date#m}-{date#d}",<!-- BEGIN event_end_date:veil -->
  "endDate": "{event_end_date}",<!-- END event_end_date:veil --><!-- ELSE -->
  "startDate": "{date#Y}-{date#m}-{date#d}T{date#H}:{date#i}:00+09:00",<!-- BEGIN_IF [{event_end_date}/nem] -->
  "endDate": "{event_end_date}<!-- BEGIN event_end_time:veil -->T{event_end_time}[trim(5, '')]:59+09:00<!-- END event_end_time:veil -->",<!-- END_IF --><!-- END_IF --><!-- BEGIN event_description:veil -->
  "description": "{event_description}[delnl]",<!-- END event_description:veil --><!-- BEGIN_IF [{main_image@path}/nem] -->
  "image": [
    "%{HTTP_MEDIA_ARCHIVES_DIR}{main_image@path}[resizeImgFit(720,720)]",
    "%{HTTP_MEDIA_ARCHIVES_DIR}{main_image@path}[resizeImgFit(720,540)]",
    "%{HTTP_MEDIA_ARCHIVES_DIR}{main_image@path}[resizeImgFit(720,405)]"
  ],<!-- END_IF --><!-- BEGIN_IF [{event_attendance_mode}/eq/OfflineEventAttendanceMode] -->
  "location": {
    "@type": "Place",<!-- BEGIN event_location_name:veil -->
    "name": "{event_location_name}",<!-- END event_location_name:veil -->
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "{event_location_address}",
      "addressCountry": "日本"
    }
  },<!-- ELSE_IF [{event_attendance_mode}/eq/OnlineEventAttendanceMode] -->
  "location": {
    "@type": "VirtualLocation",
    "url": "{event_location_offline_url}"
  },<!-- ELSE -->
  "location": [{
    "@type": "VirtualLocation",
    "url": "{event_location_offline_url}"
  },
  {
    "@type": "Place",<!-- BEGIN event_location_name:veil -->
    "name": "{event_location_name}",<!-- END event_location_name:veil -->
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "{event_location_address}",
      "addressCountry": "日本"
    }
  }],<!-- END_IF -->
  "@type": "Event",
  "@context": "https://schema.org"
}
<!-- END_IF --></script><!-- END_SetRendered -->
<!-- END entry:loop -->
〜ページャー割愛〜
<!-- END_MODULE Entry_Body -->

※SetRendered を使用して entry:loop 内で出力した JSON を headタグ内で読み込んでいます。SetRendered についての詳細は テンプレートの変数化 | テンプレート | ドキュメント | a-blog cms developer でご確認いただけます。

※画像は校正オプションでアスペクト比 16x9、4x3、1x1 のサイズを生成しています。画像の規定最小幅は720pxです。

最後に

a-blog cms での構造化データ実装は、モジュールとカスタムフィールドの組み合わせで基本的にはどの構造化データの実装も可能です。まだチャレンジしたことがない方は以下にピックアップした実装時のコツを押さえつつ実装してみてください!

実装時のコツ

エントリーを投稿する

目標


サイト内に「スタッフ紹介」という新しいコンテンツを用意し、「スタッフ1」というエントリーを投稿しましょう。


解説使用テーマbeginner

Before

After

使用素材について

チュートリアルの課題で使用する画像は、下のzipファイルよりダウンロードしてご利用ください。


ファイルを開く

チュートリアル課題用画像

目次

  1. 新規作成するエントリーのURLについて
  2. ユニットを組み立てて本文を入力する
  3. ダイレクト編集を活用しよう
  4. ユニット設定でユニットを使いやすくしよう
  5. 編集設定から YouTube ユニットを追加しよう

新規作成するエントリーのURLについて


a-blog cmsでは、各ページにおいて以下のようにURLを定めています。


トップページhttps://example.com/
一覧ページhttps://example.com/ブログコード/カテゴリーコード/
詳細ページhttps://example.com/ブログコード/カテゴリーコード/エントリーファイル名

URL内のブログコードやカテゴリーコード、エントリーファイル名(エントリーコード)には、それぞれ任意の英数字を設定できます。今回のハンズオンでは、「スタッフ紹介」カテゴリーを作成し、作成したカテゴリー内に「スタッフ1」エントリーを作成します。その際、「スタッフ紹介」のカテゴリーコードを staff 、「スタッフ1」エントリーのエントリーファイル名を staff1.html とします。したがって、新規作成するエントリーのURLは https://example.com/staff/staff1.html となります。


新規作成するエントリーの基本設定をする


エントリーの新規作成は管理ボックス内にある [エントリー作成] ボタンから行います。



エントリー作成画面が開いたら、はじめに基本設定を行います。まずはエントリーのステータスとタイトルを設定しましょう。


ステータス公開
タイトルスタッフ1


次にカテゴリーを指定します。今回作成するのは「スタッフ紹介」という新しいコンテンツなので、[追加] をクリックしてカテゴリー名とカテゴリーのコードネームを設定します。


カテゴリー名スタッフ紹介
コードネームstaff

カテゴリー名とコードネーム

最後にタグを指定します。今回は「営業」「男性」という2つの単語をタグ付けしてみましょう。タグの新規追加は直接入力欄に書き加えます。半角のコンマで区切ることで2つ以上の単語を指定することもできます。



これで基本設定は完了です。次は日付以下のタブを開いて、詳細設定・関連エントリー設定・SEO設定の項目について見ていきます。


詳細設定



詳細設定欄からは、エントリー毎にURLに表示するエントリーファイル名(エントリーコード)「任意の英数字.html」を指定することができます。今回のハンズオンでは staff1.html と設定します。


ファイル名staff1.html

以上の作業をもってエントリーのURLを https://example.com/staff/staff1.html に設定することができました。


今回のチュートリアルでの設定は以上になりますが、その他にも詳細設定画面からは、公開日時・掲載期限・概要・インデキシング・リンク先URLの設定ができます。


公開日時あらかじめ設定した時間になると記事が自動的に公開されます
掲載期限あらかじめ設定した時間になると記事が自動的に非公開になります
概要一覧ページで表示する本文の範囲を決めることができます
インデキシングチェックを外すと一覧ページにエントリーがリストされない設定になります
リンク先URL別のページのリンク先を設定することで、エントリーにアクセスがあった際に対象のページへ誘導することができます

関連エントリー設定


関連エントリー設定

その記事に関連するエントリーを検索し、関連するエントリーとして指定することができます。ブログやお知らせの記事など、主に更新頻度が比較的高いコンテンツで活用できる機能です。


SEO設定



a-blog cmsでは、SEO設定欄を入力しなくてもエントリーの作成と同時にタイトルや概要文などのSEO項目が自動的に設定されます。このSEO設定欄は、自動入力される文章と異なるものを設定したい時やサイトマップへの出力を制御する時などに使用するものです。


ユニットを組み立てて本文を入力する


基本設定が完了したら本文を入力していきましょう。a-blog cmsでは「ユニット」を組み立てることによって、コンテンツを充実させていきます。


ユニット
エントリー内には、テキストや画像など様々なコンテンツが含まれています。a-blog cmsでは、こういったコンテンツの要素を「テキストユニット」「画像・ファイルユニット」など、「ユニット」というブロックで管理しています。テーマ「beginner2020」の初期設定では、テキスト、画像・ファイル、テーブル、地図の計4つのユニット追加ボタンが並んでいます。

ユニット

下の図は、「画像・ファイルユニット」「テーブルユニット」「テキストユニット」を使ってコンテンツを組み立てた例です。例のようにユニットを挿入してみましょう。



ユニットを追加するには?


ユニットは下の画像の 3 にある灰色のボックス(以下ユニット追加ボックスと呼びます)内に並ぶボタンをクリックして追加します。ユニットはユニット追加ボックスの直前に追加されます。ユニット追加ボックスは、デフォルトでは編集ページの一番下に配置されていますが下記3通りの方法で移動させることができます。


  1. ユニット右上にある [+] ボタンをクリックすると、そのユニットの直後に移動
  2. ユニットのヘッダーをダブルクリックすると、そのユニットの直後に移動
  3. ユニット追加ボックス左上の三本線をマウスオーバーしてボックスを掴み、入れ替えたい位置までドラックし移動


ユニットを並び替えるには?


ユニットを並び替えるには、ユニット左上の三本線をマウスオーバーしてボックスを掴み、入れ替えたい位置までドラックします。または、三本線横の番号を変更することでユニットの並び順を変更します。



ユニットを組み合わせて記事を完成させたら、保存ボタンを押して公開します。



以上でチュートリアルの目標が達成できました。


ここからは補足として、エントリー編集時に役立つ「ダイレクト編集」と「ユニット設定」、そして新しいユニットを追加する「編集設定」の機能をご紹介します。


ダイレクト編集を活用しよう


ダイレクト編集
公開画面側から直感的にユニットを編集する機能です。エントリーページを表示した状態で管理ボックスの [ダイレクト編集をONにする] ボタンをクリックすると有効になります。また [ダイレクト編集をOFFにする] の状態でクリックするとダイレクト編集は無効になります。



ダイレクト編集を有効にしている時にユニットをマウスオーバーすると、編集・追加・複製・移動・削除の5つのボタンが表示されます。ここからの変更は表示画面に即座に反映されるため、エントリー編集画面を開く必要はありません。


ユニット設定でユニットを使いやすくしよう


ユニット設定画面では、表示するユニットの初期状態を変更することができます。まず以下の手順で設定画面へ移動しましょう。


  1. 管理ボックスの [管理ページ] をクリック
  2. サイドメニュー内 [コンフィグ] > セット名"デフォルト"の[コンフィグ] をクリック
  3. エントリー内 [ユニット設定] をクリック


例えば画像ユニットのデフォルトの配置は「おまかせ」となっていますが、これを「左」に変更したい場合は、このユニット設定画面から任意の項目を選択することで仕様を切り替えることができます。

特に画像の大きさは、サイトのパフォーマンスにも関わる大事な項目です。デフォルトでは「そのまま」となっていますが、ユニット設定であらかじめ大きさを指定しておきましょう。


編集設定から YouTube ユニットを追加しよう


a-blog cms では、デフォルトで以下のユニットを用意しています。

  • テキストユニット
  • 画像ユニット
  • テーブルユニット
  • ファイルユニット
  • 標準マップユニット
  • Googleマップユニット
  • Yahoo!地図ユニット
  • ビデオユニット
  • 画像URLユニット
  • 引用ユニット
  • メディアユニット
  • リッチエディター
  • 改ページユニット
  • モジュールユニット
  • カスタムユニット

しかし現時点では、以下のユニットしか使えません。



このボックスに表示されていないデフォルトのユニットについては、編集設定画面より追加することができます。例として、「YouTube」と名付けたビデオユニットを設置してみましょう。

まずは以下の手順で編集設定画面へ移動します。

  1. 管理ボックスの [管理ページ] をクリック
  2. サイドメニュー内 [コンフィグ] > セット名"デフォルト"の[コンフィグ] をクリック
  3. エントリー内 [編集設定] をクリック


編集設定画面の「ユニット追加ボタン」内 [追加] ボタンをクリックし、モードを「ビデオ」ラベルを「YouTube」として保存します。



画面上部の「保存」ボタンを押して保存してください。 これで設定は完了です。試しにエントリー作成画面を表示すると、「製品スペック」の右側に「YouTube」のボタンが追加されていることがわかります。またこのボタンをクリックすると、a-blog cms が用意しているビデオユニットが表示されます。



動画を挿入するには、このユニットの「Video ID」で動画のIDを、「サイズ」で表示サイズを指定します。

以上でエントリー内にYouTubeの動画が表示できました。今回は YouTube を挿入する想定でラベルを設定しましたが、ビデオユニットでは Video ID が作成できる動画コンテンツであれば動画が指定できるようになっています。他にもデフォルトで様々なユニットを用意していますので、必要に応じてカスタマイズしてみてくださいね。


管理画面のカスタム設定タブのUIをやめるカスタマイズ方法


a-blog cms のカスタムフィールドは、ブログ・カテゴリー・エントリー・ユーザー・モジュール とありますが、今回は カテゴリー・ユーザー のタブの数が少ない時に使えるカスタマイズをご紹介します。