保護ねこおやじのブログ

正月に発症した「くも膜下出血」の闘病日誌

MENU

広告:はてなブログのカテゴリーを階層化する方法

 

 

 

 

2023/6/5 記事公開

2023/6/22 手順を変更し引用元の記載を先頭に移動

 

本記事で紹介している「はてなブログ」におけるカテゴリーの階層化の手順及びHTMLコードは全面的に次の記事を参考にしています。

尚、参照元の記事には、

『2023年4月2日、サーバーからのスクリプト配信を停止しました。スクリプトファイルはGitHub上で提供しておりますので、引き続きご利用される方はこれまでの設定部分を修正してください。』

とお知らせがありました。このお知らせに基づいて、本記事も更新しました。

小さな星がほらひとつ「【はてなブログ】公式パンくずリストの階層化とカテゴリーのアーカイブ表示を行うブログパーツを作りました」

 

はじめに

「保護ねこおやじのブログ」のカテゴリを見ると「定年後の収入」カテゴリが突出している。

ブログ技術 カテゴリ 階層化

このカテゴリには定年後に収入を得るためのいろいろな記事が雑多に詰まっている。

読者の方がカテゴリをクリックすると、そのカテゴリに含まれる記事の一覧が表示される。「定年後の収入」をクリックしたときに、29もの記事が並ぶのはさすがに多すぎる。カテゴリを分けようかと考えたが、作成した記事を整理しなおすのも大変である。加えて単純にカテゴリを増やすのも芸がないと感じた。

カテゴリが階層化できればきれいに整理できそうなのであるが、残念ながらはてなブログのカテゴリには階層化する機能はなさそうである。今更ブログツールを変更できない。調査したところ、HTMLを編集することで階層化したカテゴリを実現できそうなことが分かった。

本記事でははてなブログのカテゴリを階層化する方法を紹介する。私と同様、はてなブログでカテゴリを階層化したいがどのようにすればよいかわからないという方は、是非この記事をご参照いただきたい。それほど技術に明るくない方にもわかりやすいように解説している。



はてなブログのカテゴリー

2月3日の記事 アフィリエイト奮闘記でブログを始めて以来、調査したブログ技術を記事で紹介している。始めた当初は記事が少なかったのであるが、少しずつ記事を増やしていくにつれ、ブログ全体が混沌としてきてしまった。

ある程度の記事数のあるブログは、カテゴリー分けを適切に行うことでSEO的に良い効果が期待できる、と聞きかじった私は、はてなブログの機能でカテゴリー分けを行い、分けたカテゴリの内容でグローバルメニューとパンくずリストを作成した。 

カテゴリー作成

はてなブログの記事編集画面で、右側の「カテゴリーアイコン」をクリックし、カテゴリーボックスの中に分類したいカテゴリーを入力してEnterする。カテゴリーのリストに入力したカテゴリーが追加される。

一通りのカテゴリーを入力し終わったら、記事ごとの編集画面でカテゴリーを選択して記事を更新・公開すればそのカテゴリーに分類される。複数のカテゴリーに分類することも可能である。カテゴリーを削除したい場合はカテゴリーの右側に表示されている×をクリックすれば消える。

ブログ技術 カテゴリ 階層化

グローバルメニュー

カテゴリー分けを行ったら、読者さんが興味のある記事を検索しやすいように、グローバルメニューを作成する。

ブログ技術 カテゴリ 階層化

グローバルメニューとは記事の上部に表示されているメニューのことであり、分類したカテゴリーに加えて、「TOP」、「Profile & Privacy Policy」、「お問い合わせ」などを配置して目的のページに1クリックで遷移できるようにしたものである。

グローバルメニューを作成するためには、ヘッダに埋め込む必要がある。次の手順でヘッダの編集画面を表示する。

ダッシュボード⇒デザイン⇒カスタマイズ(レンチアイコン)⇒ヘッダ⇒ブログタイトル下

ブログ技術 カテゴリ 階層化

ブログ技術 カテゴリ 階層化

ブログ技術 カテゴリ 階層化

私のブログのHTMLを以下に共有するので、参考にしていただきたい。

<span class="menu-toggle"><i class="blogicon-reorder lg"></i>MENU</span>
<ul id='menu'>
<div class="menu-inner">
<li><a href='https://hogonekooyaji.hatenablog.com/entry/2025/01/01/102718'>TOP
<li><a href='https://hogonekooyaji.hatenablog.com/archive/category/くも膜下出血'>くも膜下出血</a></li>
<li><a href='https://hogonekooyaji.hatenablog.com/archive/category/定年後の収入'>定年後の収入</a></li>
<li><a href='https://hogonekooyaji.hatenablog.com/archive/category/健康・美容'>健康・美容</a></li>
<li><a href='https://hogonekooyaji.hatenablog.com/archive/category/ペット・生活'>ペット・生活</a></li>
<li><a href='https://hogonekooyaji.hatenablog.com/archive/category/旅行'>旅行</a></li>
<li><a href='https://hogonekooyaji.hatenablog.com/about'>Profile & Privacy Policy</a></li>
<li><a href='https://hogonekooyaji.hatenablog.com/entry/2022/12/31/000000'>お問い合わせ</a></li>
</div>
</ul>
<script type="text/javascript" src="http://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$(function(){
$(".menu-toggle").on("click", function() {
$(this).next().slideToggle();
});
});
$(window).resize(function(){
var win = $(window).width();
var p = 768;
if(win > p){
$("#menu").show();
} else {
$("#menu").hide();
}
});
</script>
<style>
.hatena-module-category ul li{display:block;padding:8px 0;border:0;list-style-type:none}.hatena-module-category ul li a{display:inline-block;padding:0;text-decoration:none;color:#000;border:none;transition:1s ease}.hatena-module-category ul li.on-border{border-top:1px solid #ddd}ul.hatena-breadcrumb-plus-child1{padding-left:30px}ul.hatena-breadcrumb-plus-child2{padding-left:15px}.hatena-breadcrumb-plus-toggle-button{cursor:pointer}
</style>

 

ヘッダと同じ並びに「デザインCSS」がある。ここに以下のCSSコードを貼り付けて、グローバルメニューのレイアウトを設定する。

/* <system section="theme" selected="sushiyuki"> */
@import "/css/theme/sushiyuki/sushiyuki.css";
/* </system> */

/* <system section="background" selected="default"> */
/* default */
/* </system> */
#menu {
position: relative;
width: 100%;
padding-left: 0px;
height: 40px;
background: #343838;/*グローバルメニュー背景色*/
}
.menu-inner{
width: 968px;
margin: 0 auto;
height: 40px;
}
#menu li {
list-style-type: none;
float: left;
height: 40px;
text-align: left;
}
#menu li a {
padding-left: 15px;
padding-right: 15px;
display: block;
color: #ffffff;/*グローバルメニュー文字色*/
font-size: 80%;
font-weight: bold;
line-height: 40px;
}
#menu li:hover a {
color: #00DFFC;
background: #ffffff;
transition: all .5s;
}
.menu-toggle{
display: none;

}
/*パソコン1カラム*/
@media screen and (max-width:968px){
.menu-inner{
width: 768px;
}
}
/*タブレット*/
@media screen and (max-width:768px){
#top-editarea{
height: initial;
background: #343838;/*MENU背景色*/
text-align: right;/*MENUの文字の位置*/
width: 100%;
}
.menu-toggle{
color: #ffffff;/*MENUの文字色*/
display: inline-block;
padding: 5px;
margin: 3px;
}
#menu {
width: 100%;
display: none;
height: initial;
padding: 0;
margin: 0;
}
.menu-inner{
width: 100%;
height: initial;
position: static;
margin: 0;
}
#menu li{
float: none;
height: 35px;
width: 100%;
list-style-type: none;
background: #00DFFC;/*リスト文字の背景色*/
margin: 0 auto;
text-align: left;/*リストの文字の位置*/
}
#menu li a {
height: initial;
color: #343838;/*リスト文字色*/
display: block;
}
#menu li:hover a{
color: initial;
background: initial;
}
}

パンくずリスト

次にパンくずリストを作成する。パンくずリストの名前は童話「ヘンデルとグレーテル」からとったもので、道に迷わないようにするためのリストのようである。

記事の右側に表示されているこれである。

ブログ技術 カテゴリ 階層化

パンくずリストの設定は難しいものではない。以下の順に画面を開いていき、「記事ページにパンくずリストを表示する」にチェックをつけるだけである。

パンくずリストのチェックは、「記事」の一番下にある。スクロールダウンして見つけていただきたい。

ダッシュボード⇒デザイン⇒カスタマイズ(レンチアイコン)⇒記事⇒パンくずリスト⇒記事ページにパンくずリストを表示する⇒変更

記事にカテゴリーを表示

記事を開くと右サイドバーにカテゴリーボックスが表示される。

これの表示方法はパンくずリストと同様、デザイン画面で行う。

ダッシュボード⇒デザイン⇒カスタマイズ(レンチアイコン)⇒サイドバー⇒+モジュールを追加⇒カテゴリー⇒適用⇒変更

 

カテゴリーの階層化

ここまでは、既に完了しているはてなブログでのカテゴリー関連の設定内容である。

ここから現在29記事ある「定年後の収入」カテゴリーを次の6サブカテゴリーに分類する。

  1. ブログ技術
  2. ポイ活
  3. 失業保険
  4. アフィリエイト記事
  5. ビットコイン
  6. 古物商

カテゴリーの階層化を行うにあたり、ここまでで説明したカテゴリー関連の設定内容はすべて完了していることが前提となる。特にパンくずリストの表示とサイドバーへのカテゴリーの表示は必須である。

フッタへスクリプトの入力

デザイン画面でフッタに対してスクリプトを入力し、変更を保存する。

ダッシュボード⇒デザイン⇒カスタマイズ(レンチアイコン)⇒フッタ⇒HTMLの記述

入力するスクリプト

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

<script>
var host=$(location).attr("host");function remapBreadcrumb(breadcrumb){new_breadcrumb_html="";for(var i=0;i<breadcrumb.length;i++){url_category=;for(var j=0;j<=i;j++)url_category[j]=breadcrumb[j];var category_url="https://"+host+"/archive/category/"+url_category.join("-");new_breadcrumb_html+='<span class="breadcrumb-child""><a class="breadcrumb-child-link" href="'+category_url+'"><span>'+breadcrumb[i]+"</span></a></span>",i+1<breadcrumb.length&&(new_breadcrumb_html+='<span class="breadcrumb-gt"> &gt;</span>')}""!=new_breadcrumb_html&&$("#top-box > div.breadcrumb > div.breadcrumb-inner > span.breadcrumb-child:first").prop("outerHTML",new_breadcrumb_html)}function remapArticleCategory(categories){for(var index=0;void 0!==categories[index+1]&&categories[index+1].text.includes("-");)index+=1;breadcrumb_array=categories[index].text.split("-"),remapBreadcrumb(breadcrumb_array),category_num=categories.length;for(var i=0;i<category_num;i++)category_branch=categories[i].text.split("-"),categories[i].text=category_branch[category_branch.length-1]}function remapCategoryBreadcrumb(breadcrumb){new_breadcrumb_html="";for(var i=0;i<breadcrumb.length;i++)if(i+1<breadcrumb.length){url_category=;for(var j=0;j<=i;j++)url_category[j]=breadcrumb[j];var category_url="https://"+host+"/archive/category/"+url_category.join("-");new_breadcrumb_html+='<span class="breadcrumb-child"><a class="breadcrumb-child-link" href="'+category_url+'">'+breadcrumb[i]+"</span></a></span>",new_breadcrumb_html+='<span class="breadcrumb-gt"> &gt;</span>'}else new_breadcrumb_html+='<span class="breadcrumb-child">'+breadcrumb[i]+"</span>";""!=new_breadcrumb_html&&$("#top-box > div.breadcrumb > div.breadcrumb-inner > span.breadcrumb-child:first").prop("outerHTML",new_breadcrumb_html)}function remapArchiveCategory(categories){for(var i=0;i<categories.length;i++)category_branch=categories[i].text.split("-"),categories[i].text=category_branch[category_branch.length-1]}$(document).ready(function(){var $entry_categories=$("#main-inner > article.entry > div.entry-inner > header > div.entry-categories > a");0<$entry_categories.length&&remapArticleCategory($entry_categories);var $archive_entries=$("#main-inner > div.archive-entries");0<$archive_entries.length&&($breadcrumb_child=$("#top-box > div.breadcrumb > div.breadcrumb-inner > span.breadcrumb-child:first"),breadcrumbs=$breadcrumb_child.find("span").text().split("-"),remapCategoryBreadcrumb(breadcrumbs),$archive_entries.each(function(){remapArchiveCategory($(this).find("section > div.categories > a"))}))});
</script>

<script>
function processArchive(a,b,c){for(flag=!0;a<$all_li.length;){if($li=$($all_li[a]),$a=$li.find("a"),category_name=$a.text(),breadcrumb=category_name.split("-"),level=breadcrumb.length,1==level&&a>0&&$li.attr("class","on-border"),level<b)return b>2&&$($all_li[a-1]).css("padding-bottom","0px"),a-1;level==b?($a.text(breadcrumb[level-1]),null!=c?$li.appendTo(c):($opend_span=$('<span class="hatena-breadcrumb-plus-toggle-button" id="opend-'+a+'">▼</span>'),$closed_span=$('<span class="hatena-breadcrumb-plus-toggle-button" id="closed-'+a+'">▶</span>'),$closed_span.css("visibility","hidden"),$opend_span.css("display","none"),$li.prepend($closed_span),$li.prepend($opend_span))):(id=a-1,ulid="hatena-breadcrumb-plus-toggle-"+id,$new_ul=$('<ul id="'+ulid+'" type="square"></ul>'),level>2?$new_ul.attr("class","hatena-breadcrumb-plus-child2"):($new_ul.attr("class","hatena-breadcrumb-plus-child1"),$new_ul.css("display","none")),$($all_li[id]).append($new_ul),$("#closed-"+id).css({visibility:"visible",display:"inline"}),$("#opend-"+id).on("click",{_id:id,_toggle:"close"},toggleCategory),$("#closed-"+id).on("click",{_id:id,_toggle:"open"},toggleCategory),a=processArchive(a,level,$new_ul)),a+=1}return a}function toggleCategory(a){"close"==a.data._toggle?($("#hatena-breadcrumb-plus-toggle-"+a.data._id).toggle(),$("#closed-"+a.data._id).toggle(),$("#opend-"+a.data._id).toggle()):"open"==a.data._toggle&&($("#hatena-breadcrumb-plus-toggle-"+a.data._id).toggle(),$("#opend-"+a.data._id).toggle(),$("#closed-"+a.data._id).toggle())}var $hatena_module_category=$("div.hatena-module-category"),parent_level=1;$all_li=$hatena_module_category.find("li"),$(document).ready(function(){"undefined"!=typeof $hatena_module_category&&processArchive(0,1,null)});
</script>

スタイルシートの設定

デザイン画面でヘッダに対してHTMLコードを入力し、スタイルシートを設定する。入力したら、変更を保存する。

ダッシュボード⇒デザイン⇒カスタマイズ(レンチアイコン)⇒ヘッダ⇒ブログタイトル下

<style>
.hatena-module-category ul li{display:block;padding:8px 0;border:0;list-style-type:none}.hatena-module-category ul li a{display:inline-block;padding:0;text-decoration:none;color:#000;border:none;transition:1s ease}.hatena-module-category ul li.on-border{border-top:1px solid #ddd}ul.hatena-breadcrumb-plus-child1{padding-left:30px}ul.hatena-breadcrumb-plus-child2{padding-left:15px}.hatena-breadcrumb-plus-toggle-button{cursor:pointer}
</style>

カテゴリーの設定

次のルールに従って、階層化カテゴリーの登録を行う。

  • 「親カデコリ-子カテゴリ」という命名規則で、擬似的な階層を表すカテゴリを登録する。
  • 「親カテゴリだけ」のカテゴリを必ず登録する。
  • カデコリの並び順が「親カテゴリ」→「親カテゴリ-子カテゴリ」となるように登録する。

 

「定年後の収入」カテゴリーは既に登録済みである。これと並列で、定年後の収入-サブカテゴリーを6個登録する。

ブログ技術 カテゴリ 階層化



ダッシュボード⇒デザイン⇒カスタマイズ(レンチアイコン)⇒サイドバー⇒カテゴリーの編集⇒並び替え順⇒アルファベット順⇒適用⇒変更を保存する

登録したら、カテゴリーの並び順を変更する。

公開して表示するとサイドバーのカテゴリーが次のように変わっている。

ブログ技術 カテゴリ 階層化

「定年後の収入」を展開すると

ブログ技術 カテゴリ 階層化

 

これから今まで作成した記事の定年後の収入カテゴリーの記事を再振り分けする。これは1記事ずつ手動で設定する。

しばらくしたら変更されているはずなので、楽しみに見ていただきたい。

 

おわりに

カテゴリーを階層化すると、増大していく記事を詳細にグループ化することができ、整理されていくというメリットがある。

一方でスタイルシートスクリプトを活用することにより、ブログ記事の表示にオーバーヘッドがかかり、表示速度が遅くなってしまう。

このデメリットを承知のうえ、カテゴリーの階層化をご検討いただきたい。

 

お勧めのASP・ネットショッピング

アフィリエイトを始めるなら、

 

ネットショッピングするなら、

 

 ※記事で使用した画像の出典は、「はてなブログ」の管理画面である。