ホーム > ブログ > concrete5 > コンクリ5.7でタイトルタグ出力の仕方を変えてみる

コンクリ5.7でタイトルタグ出力の仕方を変えてみる

2016.07.11

憂鬱な月曜日が始まったよーーいえい!
お久しぶりです、銀ねこでーす。

今日はコンクリお得意のSEOで大切なMETAタグタイトルの出力の仕方についてまとめます。

METAタイトルタグの出力ですら柔軟!

おさらいです。
concrete5のMETA要素のタイトルタグの設定は/concrete/config/concrete.phpの795行目あたりにあります。

  1. 'seo' => array(
  2.  
  3. 'tracking' => array(
  4. /**
  5.   * User defined tracking code
  6.   *
  7.   * @var string
  8.   */
  9. 'code' => '',
  10.  
  11. /**
  12.   * Tracking code position
  13.   *
  14.   * @var string (top|bottom)
  15.   */
  16. 'code_position' => 'bottom'
  17.  
  18. ),
  19. 'exclude_words' => 'a, an, as, at, before, but, by, for, from, is, in, into, like, of, off, on, onto, per, ' .
  20. 'since, than, the, this, that, to, up, via, with',
  21.  
  22. /**
  23.   * URL rewriting
  24.   *
  25.   * Doesn't impact URL_REWRITING_ALL which is set at a lower level and
  26.   * controls whether ALL items will be rewritten.
  27.   *
  28.   * @var bool
  29.   */
  30. 'url_rewriting' => false,
  31. 'url_rewriting_all' => false,
  32. 'redirect_to_canonical_url' => false,
  33. 'canonical_url' => null,
  34. 'canonical_ssl_url' => null,
  35. 'trailing_slash' => false,
  36. 'title_format' => '%1$s :: %2$s',
  37. 'title_segment_separator' => ' :: ',
  38. 'page_path_separator' => '-',
  39. 'group_name_separator' => ' / ',
  40. 'segment_max_length' => 128,
  41. 'paging_string' => 'ccm_paging_p'
  42. )

サイトのMETAタイトルの設定はここ。

'title_format' => '%1$s :: %2$s'  => 「サイト名 :: ページ名」

と出力されるわけですが、SEO的にページ名 サイト名と出力したいですし、::がなんとなくダサい笑のでできればページタイトルサイト名の間に置くのをと「 | 」や「 - 」に変えたいこともありますよね?

そんな時はconcrete以下のこのファイルを…

触りません。


なぜかって?

ここにあるのはコアファイルだからです。
concrete5そのものの原本なのです。

じゃあどう変更するのかって?

オーバーライド(上書き)します。

じゃあどうやって?
実はapplication/の中をよく見ているとファイル構造が/concreteの中と(コア)そっくり!!

application/config/の中に全く同じ名前のファイルを作り、必要なところだけ変更した項目を追加します。

そして変更したい箇所の設定を変えるだけでオーバーライド!上書きされます。
コアのソースは汚れません!!!

変えたいのはタイトルの出力の仕方だけなので。。。。

  1. <?php
  2.  
  3. return array(
  4. 'seo' => array(
  5. 'title_format' => '%2$s | %1$s',
  6. 'title_segment_separator' => ' | ',
  7. ),
  8. );

%2$s(ページタイトル)と%1$s(サイト名)を入れ替えて区切りを「|」に変えてみました。
これでサイト全体で出力されるタイトルは「ページ名 | サイト名」という感じになりますよ。

テンプレごとにも出力内容が変えられるんだぜ

さらにさらに、テーマで作成したページテンプレートごとに出力できるMETAタイトルタグも変更可能。

基本は先ほどのapplication/configの中に設定して、テーマのテンプレートごとのLoader::elementに何を出力するか設定すればいいんだと思う。

コンクリではコンクリ化するためにこの一文を差し込むんだけどこいつがhead内にSEO的なタグも含めて勝手に追加してくれます。

  1. <?php
  2. $pageTitle = 出力したい内容;
  3. Loader::element('header_required', array('pageTitle' => $pageTitle));?>
  4. </head>

ちなみにこの変数$pageTitleは初期値は空で、ページから編集すれば好きなようにMETAタイトルを変更できます。

なので、後日METAタイトルをどうしても主導で変更したくなった時を考慮しつつ、子ページをさも単独のサイトに見せかけたければこんな感でもいいかも。

  1. if($pageTitle == null){
  2. $title = $c->getCollectionName();
  3. $pageDescription =c->getCollectionDescription();
  4. $pageTitle = $title . ' | ' . $pageDescription;
  5. }

もし、サイトの設定でMETAタイトルに何も入力がなければ

サイト名 | ページの説明

といった感じで出力されます。

ついでに親ページのタイトルも表示したい

ページの階層が深いとき、METAタイトルを「ページ | 親ページ | サイト名」と言ったように表示したいときもありますよね?

そんなときはこちらのように、親ページがサイトトップじゃなかった場合、親ページのタイトルを取得します。

  1. //ページタイトル追加
  2. $pageTitle = $c->getCollectionName() ;
  3.  
  4. //親ページのタイトル取得
  5. $parent = Page::getByID($c->getCollectionParentID());
  6. $parentTitle = $parent->getCollectionName();
  7.  
  8. //親ページがホームじゃなかった場合、親タイトル追加
  9. if( !$pageTitle && $c->getCollectionParentID() != 1){
  10. $siteName = Config::get('concrete.site');
  11. $pageTitle .= ' | '. $parentTitle;
  12. }
  13.  
  14. //サイトタイトル追加
  15. $pageTitle .= ' | '.$siteName;

まとめ

コンクリにはSEO一括アップローダーという便利な機能があるんですが、結局自動で書き出したほうが楽なのでこういった感じで最初から仕様に入れてあげると楽ですね。

この記事のタグ