- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2020-05-02T19:32:34+09:00;2020-04-21T07:22:01+09:00","default:tgoto","tgoto")
#author("2024-03-29T09:38:44+09:00;2021-06-20T10:49:58+09:00","default:tgoto","tgoto")
すでにカスタマイズを加えている[[pukiwikiカスタマイズ箇所/2018]]の項目に加えて、2019年に新たに下記の改変を加えた。
#contents
----
*Pukiwiki 1.5.2へのアップデート
*Pukiwiki 1.5.2へのアップデート [#a8e05459]
これによりlibフォルダ内にあるlib/html.phpなどは再修正を強いられることになった。なお、検索などが高速化したとのことだが100ページ程度の当wikiではこれまでもサイト内検索は一瞬であったため、あまり恩恵を実感できるほどの違いはない。
ja.lng.php, lib/html.phpなどは[[pukiwikiカスタマイズ箇所/2018]]に記載したのと同様の修正を再度加えた。
* PukiWikiのSSL対応(https化)
* PukiWikiのSSL対応(https化) [#z279f88b]
サイト全体をSSL対応(https化)とした。コスト削減のためにレンタルサーバーで提供されている無料SSLを用いている。最近のモダンブラウザの仕様ではSSLに対応していないサイトでは「安全ではないサイトです」というような警告が表示されるものもある。またSEO的にもHTTPS対応しているか否かが評価対象となるという話もある。
10年ほど前までは個人のウェブサイトにSSLを導入するには数万円の費用を要することもあったが、最近は個人用であれば安価なSSLも利用可能となっている。
** 当サイトの具体的な実施内容
** 当サイトの具体的な実施内容 [#of430ecd]
SSL化したサイトでは、サイト内リンク(画像などのページ内要素も含む)が全てSSL化されていることが必要である。ページによって https:// ではなく http:// へのリンクがのこっていると「安全ではないサイトです」の警告が表示されてしまうこともある。サイトをSSL化した場合は .htaccess でhttpへのアクセスをhttpsへ転送する設定をしておくと良い。
Google search consoleでは、ドメインごとDNSで登録しているのではなくサーバに置いた認証ファイルかmetaタグなどでサイトのプロパティを登録している場合、SSL化に伴ってhttpとは別のhttpsのサイトを登録しなおす必要があることがある。またサイトマップもSSL対応後も書き換えがなされていないと意味がないので、https対応のURLを記載すること。
* PukiWikiのSEOとは
* PukiWikiのSEOとは [#k2519be1]
#ogpi(https://oncologynote.com/?bb5f42b035)
#ogpi(https://oncologynote.jp/?bb5f42b035,prefetch)
*画像圧縮とサイト表示の高速化
*画像圧縮とサイト表示の高速化 [#x9b1d1f2]
[[Google Pagespeed Insight:https://developers.google.com/speed/pagespeed/insights/]]でウェブページの表示速度などを測定し軽量化の評価をすることができる。これで高得点であることはサイトの高評価につながる。なお、PukiWiki自体はwordpress などに比べるとずっと表示速度は速く、当サイトもサーバが不安定でない限りほぼ99点〜100点であることが多い。
#ref(https://oncologynote.com/img/20190909.png)
#ref(https://oncologynote.jp/img/20190909.png,nolink)
**画像ファイルの圧縮
**画像ファイルの圧縮 [#m6a09b9e]
サイトそのものを軽くする方法はいろいろなものがあるが、特に効果が大きいのは画像の圧縮である。PNGファイルは[[TinyPNG:https://tinypng.com/]]や[[CompressPNG:https://compresspng.com/]]などのPNG圧縮サイトで徹底的にサイズを小さくしよう。複数のPNG圧縮サイトに繰り返しPNGファイルを投入するとどんどん圧縮できる。
**他のファイルの軽量化や省略
**他のファイルの軽量化や省略 [#ee7e9b43]
複数のCSSのincludeを1つにまとめたり、javascriptを軽量化するか省略するなどするのも効果的であると思われる。当サイトはもともとほとんどjavascriptを使用していないので、これについては言及しない。
**htaccessでのキャッシュの設定
**htaccessでのキャッシュの設定 [#r507f408]
画像ファイルやwebフォントなどについては下記を.htaccessに記載してキャッシュ設定をすることで高速化が図れる。下記では画像ファイル(gif,jpg,png,ico)とwebフォント、それに別に記載したOGPプラグインで使用しているimgファイルを2592000秒(30日間)キャッシュするようにしている。
> <Files ~ ".(gif|jpe?g|png|img|ico|woff)$">
> Header set Cache-Control "max-age=2592000, public"
> </Files>
なお今回はjavascriptなどについてはキャッシュしていない(このサイトでほとんど使用していないので)。
* PukiwikiのAMP対応
* PukiwikiのAMP対応 [#wc4e0192]
#ogpi(https://oncologynote.com/?78d3e6b858)
#ogpi(https://oncologynote.jp/?78d3e6b858)
* PukiwikiスキンのOGP対応
* PukiwikiスキンのOGP対応 [#sa1f96ca]
#ogpi(https://oncologynote.com/?ee680ff74a)
#ogpi(https://oncologynote.jp/?ee680ff74a)
*URL短縮ライブラリの組み込み
*URL短縮ライブラリの組み込み [#id994328]
URL短縮ライブラリを組み込んで、URLの短縮を試みる。lib/shroturl.phpのアップロード、lib/pukiwiki.php lib/func.php lib/make_link.phpの修正が必要である。他のプラグインの改造などに比べてこのURL短縮ライブラリははるかに構造が複雑で、現在は開発元のサイトの方がPukiWiki 1.5.2まで精力的にアップデート対応をしてくださっているが、今後このアップデートが対応できなくなった場合にはメンテナンスを独力で続けるのは難しそう。。。
URL短縮ライブラリを組み込んで、URLの短縮を試みる。lib/shroturl.php(&ref(shorturl.php);)のアップロード、lib/pukiwiki.php lib/func.php lib/make_link.php(&ref(make_link.php);)の修正が必要である。他のプラグインの改造などに比べてこのURL短縮ライブラリははるかに構造が複雑で、現在は開発元のサイトの方がPukiWiki 1.5.2まで精力的にアップデート対応をしてくださっているが、今後このアップデートが対応できなくなった場合にはメンテナンスを独力で続けるのは難しそう。。。
#ogp(https://dajya-ranger.com/pukiwiki/embed-url-shortener/,amp)
#ogp(https://dajya-ranger.com/pukiwiki/embed-url-shortener/)
***lib/pukiwiki.phpの31行目に挿入
***lib/pukiwiki.phpの31行目に挿入 [#wc1ee6ba]
> // URL短縮ライブラリロード
> require(LIB_DIR . 'shorturl.php');
***lib/pukiwiki.phpの45行目に挿入
***lib/pukiwiki.phpの45行目に挿入 [#j4d66753]
> // ページ名上書きセット
> $vars['page'] = get_pagename_from_short_url($vars['page']);
***lib/func.phpの815目に挿入
***lib/func.phpの815目に挿入(これは1.5.3から不要になった) [#l4243dde]
> {
> return get_base_uri($uri_type) . get_short_url_from_pagename($page); // ※ライブラリの仕様を一部変更し、2019/06/03記事公開当初の記述に戻した
> /* コメントアウト
> global $defaultpage;
> if ($page === $defaultpage) {
> return get_base_uri($uri_type);
> }
> return get_base_uri($uri_type) . '?' . pagename_urlencode($page);
> */
> }
***lib/make_link.php の780行目を下記に変更
(Pukiwiki 1.5.3では848行目)
***lib/make_link.php の780行目を下記に変更 [#a1e81647]
(Pukiwiki 1.5.3では848行目)(これは1.5.3から不要になった)
> $r_page = pagename_urlencode($page); //780行 修正前
> $r_page = get_short_url_from_pagename($page); //780行 修正後
***lib/make_link.php の802行目の ? を削除
(Pukiwiki 1.5.3では870行目)
***lib/make_link.php の802行目の ? を削除 [#gb9ca1cf]
(Pukiwiki 1.5.3では870行目)(これは1.5.3から不要になった)
> return $al_left . '<a ' . 'href="' . $script . '?' . $r_page . $anchor . //802行 修正前
> return $al_left . '<a ' . 'href="' . $script . $r_page . $anchor . //802行 修正後
*HTML5対応とmetaタグの変更
*HTML5対応とmetaタグの変更 [#ia297fa4]
*レスポンシブメニュー
*レスポンシブメニュー [#n58cd493]
別名ハンバーガーメニューとも。スマホなどのモバイルブラウザのみで表示される、クリックすると左の画面外からせり出してくるタイプのメニューである。
#ogpi(https://oncologynote.com/?14f584878f,amp)
#ogpi(https://oncologynote.jp/?14f584878f)
*FrontPageだけトップにロゴとサイト名を表示させる
*FrontPageだけトップにロゴとサイト名を表示させる [#o747be09]
特定ページだけで表示される機能の実装 http://design.kyusan-u.ac.jp/OpenSquareJP/?pukiwiki/Customize#q=%E4%BB%A5%E5%A4%96 で記載されている機能を使って、タイトルが「FrontPage」となっているトップページだけでページタイトルを非表示とし、一方でロゴとサイト名を表示させることにした。
具体的には
> <?php if ( $title == 'FrontPage' ) { ?> AAA <?php } else { ?> BBB <?php } ?>
としておくとページタイトルがFrontPageに合致するページのみでAAAが実行される一方でBBBは実行されない。このAAAやBBBには好みのHTMLや <?php echo $title ?> などを挿入すると、FrontPageだけで特定の画像を表示したり、逆にh1ページタイトルを非表示にしたりできる。一方で <?php if ( $title != 'FrontPage' ) { ?> とすればFrontPage''以外''でこれを実行するようにも設定できる。
これの応用で、FrontPage以外のページでモバイルブラウザから閲覧した場合のみ左上にサイトアイコンとサイト名を記載することにした。FrontPageではこの左上のサイトアイコンとサイト名を非表示にしている。このまま設置しただけでは右上のレスポンシブメニュー(ハンバーガーメニュー)の≡アイコンと高さが微妙にずれてしまい見栄えが良くないので、縦位置を揃えるために、position:relative と top:3px; などを併用して見栄えを整えている。
* その他
* その他 [#f40e3917]
** 2カラムへの変更
** 2カラムへの変更 [#p22176dc]
従来は760px以下のブラウザは1カラム、960px以上のブラウザは3カラムとしてその間を2カラムとしていたが、2019年9月から760pxを境に1カラムと2カラムをレスポンシブに切り替えるデザインとした。
(2019.9.14追記)
その後に1カラムに変更しました。
** search.inc.phpプラグインでGETメソッドを可能にする
** search.inc.phpプラグインでGETメソッドを可能にする [#m3111428]
#ogpi(https://oncologynote.com/?9cbde2f52e)
#ogpi(https://oncologynote.jp/?9cbde2f52e)
**言語設定とタイムゾーンの変更
**言語設定とタイムゾーンの変更 [#j5e97919]
#ogpi(https://oncologynote.com/?b05a991dac)
#ogpi(https://oncologynote.jp/?b05a991dac)
** htmlinsert.inc.phpプラグインの導入
あらかじめコードしておいたHTMLをPukiwiki内で表示するためのhtmlinsert.inc.phpをインストールする。このプラグインでは、Pukiwikiを設置しているフォルダ内にhtmlinsertのフォルダを新たに置いておき、この中にHTMLを記載したtxtファイルを置いておくとPukiwiki内でincludeすることができる。サイドバーでTwitterへのリンクや検索ボックスを設置するためにこのプラグインを利用している。
** htmlinsert.inc.phpプラグインの導入 [#ra373eda]
あらかじめコードしておいたHTMLをPukiwiki内で表示するためのhtmlinsert.inc.php(&ref(htmlinsert.inc.php);)をインストールする。このプラグインでは、Pukiwikiを設置しているフォルダ内にhtmlinsertのフォルダを新たに置いておき、この中にHTMLを記載したtxtファイルを置いておくとPukiwiki内でincludeすることができる。サイドバーでTwitterへのリンクや検索ボックスを設置するためにこのプラグインを利用している。
なお、自由にHTMLを挿入できるhtml.inc.php(&ref(html.inc.php);)もある。こちらはセキュリティに問題があるので不特定多数が自由に編集できるpukiwikiへのインストールは勧められないが、編集者が限られているpukiwikiでは有用。
''関連ページ:'' [[https://pukiwiki.osdn.jp/?自作プラグイン/htmlinsert.inc.php>https://pukiwiki.osdn.jp/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3/htmlinsert.inc.php]]
** alias.inc.phpの導入
** alias.inc.phpの導入 [#n1799467]
ページ名の変更などを行った際に旧ページから新ページに転送するためのaliasプラグインを導入した。なお、公式サイトで公開されていたはずの旧版はすでに入手できなくなっているようで、有志の方が新たに作り直してくださったものが公開されている。
ページ名の変更などを行った際に旧ページから新ページに転送するためのaliasプラグイン(&ref(alias.inc.php);)を導入した。なお、公式サイトで公開されていたはずの旧版はすでに入手できなくなっているようで、有志の方が新たに作り直してくださったものが公開されている。
http://tomose.dynalias.net/junk/index.php?pukiwiki%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3/alias
**スタイルシート pukiwiki.css
**スタイルシート pukiwiki.css [#la64e00c]
h1,h2,h3などのborderの変更、行間の拡大などデザイン上の微修正。
**存在しないページへのアクセスを404にする
**存在しないページへのアクセスを404にする [#d7ee84a9]
#ogpi(https://oncologynote.com/?bfc1febae4)
#ogpi(https://oncologynote.jp/?bfc1febae4)
** X-Robots-Tag http ヘッダーのnoindexをコメントアウト
** X-Robots-Tag http ヘッダーのnoindexをコメントアウト [#e7d1ad51]
lib/html.php内に設定されている X-Robots-Tag http ヘッダーでnoindexを吐くようになっているが、これがどうも必要なページにまでnoindexのhttpヘッダーを送っているようで行儀が悪い。Google search consoleでみると表示されるべきページでもインデックスされていないものが多数あり、その理由を確認すると「httpヘッダーでnoindexを検出したのでインデックスの登録を外した」と表示されてしまうページが多数ある。
正規表現でnoindexをつけるページを振り分けることもできるが、ひとまずHTML内ではなくhttpヘッダーでnoindexをつける設定は下記のようにコメントアウトしておくという方法がある。しかしこれは、本来はインデックスされてほしくないPukiwikiの編集ページや添付ファイルページまでインデックスされそうになるというデメリットもあります。また、noindexがあってもなくてもGoogleにインデックスされるときはされるようなので、あまり実効性はないかもしれません。利用は慎重に判断すること。
> //if (!$is_read || $nofollow) {
> // if (!headers_sent()) {
> // header("X-Robots-Tag: noindex,nofollow");
> // }
> //}
**インデックスされたくないページにrobots.txtを設定する
**インデックスされたくないページにrobots.txtを設定する [#ddcd003e]
Pukiwikiの内部ページはやたらと検索サイトにインデックスされるのを避けたい。Googleのbotが勝手にPukiwikiを書き換えることはないと思うが、検索された時にcmd=newpageなどプラグインページばかりが検索されるのは避けたいものである。検索インデックスを避ける方法は色々とあるが、ひとまず単純にrobots.txtに下記の事項を書いておいてGoogle botを避けることとする。
> User-agent: *
> Disallow: /*plugin=*
> Disallow: /*cmd=diff*
> Disallow: /*cmd=newpage*
> Disallow: /*cmd=freeze*
> Disallow: /*cmd=rename*
> Disallow: /*cmd=edit*
> Disallow: /*cmd=backup*
**pukiwiki.ini.php
**pukiwiki.ini.php [#ffd559e1]
-nowikinameを0から1に変更(CheckMateなどのキーワードへの自動リンクを回避するため)
**recent.inc.phpの呼び出し回数
**recent.inc.phpの呼び出し回数 [#p661ab2e]
recentプラグインはサーバーへの負荷対策として、PukiWiki 1.4.6から一度に呼び出せる回数に制限が2度までとかけられている。しかし、これではレスポンシブ対応のサイトでFrontPageにrecentプラグインを使うと、本文内・サイドバー・スマホ用ハンバーガーメニューの3箇所で呼び出すことになりエラーが生じる。呼び出せる回数を3回に増やしておくことで回避できる。
''関連ページ:'' [[https://pukiwiki.osdn.jp/dev/?BugTrack/2090]]
> define('PLUGIN_RECENT_EXEC_LIMIT', 3); // ここを2から3に変更しておく
**検索ページや編集ページでもMenubarを表示する
**検索ページや編集ページでもMenubarを表示する [#hcdc00c9]
Pukiwikiの初期設定のままではread設定されているページ(検索ページや編集ページなど)ではMenubarが表示されないので、read設定されているページでもMenubarが表示されるようにする。これを設定しておかなければレスポンシブメニューをクリックした時に白紙が表示されるだけになってしまって寂しい。pukiwiki.skin.phpに少し手を加えることで回避できる。
‘’関連ページ:’’ [[https://pukiwiki.osdn.jp/dev/?PukiWiki/1.4/ちょっと便利に/編集や検索ページでも常にMenubarを表示する>https://pukiwiki.osdn.jp/dev/?PukiWiki/1.4/%E3%81%A1%E3%82%87%E3%81%A3%E3%81%A8%E4%BE%BF%E5%88%A9%E3%81%AB/%E7%B7%A8%E9%9B%86%E3%82%84%E6%A4%9C%E7%B4%A2%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A7%E3%82%82%E5%B8%B8%E3%81%ABMenubar%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B]]
> <?php if (arg_check('read') && exist_plugin_convert('menu')) { ?> //編集前
> <?php if (exist_plugin_convert('menu')) { ?> //編集後
** 「関連ページ」に改行を(lib/func.php)
** 「関連ページ」に改行を(lib/func.php) [#q5dabdff]
308行目 return '<span class="page_passage" data-mtime="' . $date_atom . '"></span>'; の</span>の直後に<br />を挿入して「このページに関連するページ」の各項目を改行させて縦に並べるようにした。
> return '<span class="page_passage" data-mtime="' . $date_atom . '"></span><br />'; //編集後は<br />を加えている
** デフォルトで「タイムスタンプを更新しない」に(lib/html.php)
** デフォルトで「タイムスタンプを更新しない」に(lib/html.php) [#v627f67e]
398行目のinputタグに checked="checked" をつけて、「タイムスタンプを変更しない」をデフォルトにした。
(Pukiwiki 1.5.3では402行目)
> $add_notimestamp = '<input type="checkbox" name="notimestamp" checked="checked" ' .
> 'id="_edit_form_notimestamp" value="true"' . $checked_time . ' />' . "\n" .
** パンくずリストで存在しないページへのリンクを張らない
ついでにタイムスタンプを編集するプラグインtimestamp.inc.php(&ref(timestamp.inc.php);)もインストールしておきます。
** パンくずリストで存在しないページへのリンクを張らない [#ne86e442]
plugin/topicpath.inc.php の56行目で PKWK_READONLY && をコメントアウト
**AutoTicketLinkNameというページが何度削除しても自動生成されるのを完全に防ぐ
**AutoTicketLinkNameというページが何度削除しても自動生成されるのを完全に防ぐ [#ef3f9e9e]
plugin/edit.inc.php の一番下にある
>init_autoticketlink_def_page();
の前にスラッシュ2本(//)を置いてコメントアウトして、AutoTicketLinkNameが自動生成されるのを完全に防止することに成功した。
*スマホでページを見た際に数字が並んでいても電話番号としてのリンクを貼らない
**autolink作成時のコメントを入れない [#v551bb94]
lib/makelink.phpの861行目と862行目にある、HTMLにautolinkのコメントを挿入する部分を削除する。コメントが残っていてもHTML的には問題ないはずなのだが、iOSのSafariからページを見るとHTMLコメントで微妙にスペースが空くのが気になったため。
**スマホでページを見た際に数字が並んでいても電話番号としてのリンクを貼らない [#r5906c5d]
iPhoneのSafariの場合であれば8〜11桁の数字は勝手に電話番号だと認識されてアンカーをふかされてTELリンクを貼られてしまう。これ自体はサイトによっては便利な機能であり、特に予約の電話などを受け付けたい小売店・飲食店ではこの機能はありがたいのだが、当サイトのような電話をかけることと直接関係しない場合はこの機能はじゃまになってしまう。むしろ文献の発行年とページ数が勝手にTELリンクになってしまい、不用意にクリックすると電話を発信しそうになるのは勘弁していただきたい。
そこで、ブラウザがTELリンクを貼ることをmetaタグで制限しておく。ただしこれをつけると本来ならTELリンクを張りたいところでもTELリンクにならないことに注意する。
> <meta name="format-detection" content="telephone=no">
#navi
#navi(pukiwikiカスタマイズ箇所)