トップページ > 記事閲覧
【雑談】HAIKに搭載の #canonical の性質 使い方留意点
投稿日 : 2021/02/23(Tue) 22:56
投稿者 Yujiro
参照先
#canonical(ページ名orURL)について

HAIKでは、マニュアルにないので仕様が解明されていないこともありで
気づいた留意点を上げておきます。知らないままだと手間取ることあり。

====
書式:#canonical(ページ名orURL)

これをページに書くと、そのページの<head>に

<link rel="canonical" href="指定先URL">   が記述される。

"canonical" それ自体については以下の参考ページをどうぞ。
https://www.seohacks.net/blog/989/
====

【留意点】以下のような条件での可不可を記します。

1. ページ名記述のパターン(自サイト内のみで使える)
1-1. #canonical(日本語ページ名)   可
1-2. #canonical(英数半角ページ名)  可

2. URL記述のパターン(外部サイトへのcanonicalで必須)
2-1. #canonical(https://x-x-x-x-x.com/index.php?日本語ページ名) 不可 ←問題だ!
2-2. #canonical(https://x-x-x-x-x.com/index.php?英数半角ページ名)  可

2. のパターンは、他のサイトにcanonicalしたい場合です。URLを書かざるを得ません。

このとき、そのページがHAIKで作られていて、ページ名が日本語だとお手上げになります。
(実は2-1.は自サイトHAIK内でもダメ)

解決策は!?

そこで逃げを打つには、その日本語URLのページ(canonical先)で「このページの>共有」を開き、短縮URLを得ること。
そうするとページ名部分が英数半角となり、これをURLとして記述します。

#canonical(短縮URL)

とりあえずでありますが、なんとかです。
正直、あまりスマートとは言えません。
#canonical(URL)の仕様変更が望まれますが、望みなしか。
Re: 【雑談】HAIKに搭載の #canonical の性質 使い方留意点
投稿日 : 2021/02/25(Thu) 22:05
投稿者 Yujiro
参照先
いしまるさん

おおっ!素晴らしい。早速動かしてみました。

>漢字を含むURLの時にhttpから始まるURLのベース部分が
ダブってしまうという不具合もあるようです。

そうそう、これこれ、これでNGなんです。

とりあえず考えられるパターンでテストしてみましたが、良好な動作です!

ありがとうございます。

(また自己管理しなきゃならないファイルが増えた。)
Re: 【雑談】HAIKに搭載の #canonical の性質 使い方留意点
投稿日 : 2021/02/25(Thu) 18:04
投稿者 いしまる◆vOmCuTAP2Tw
参照先
漢字を含むURLの時にhttpから始まるURLのベース部分が
ダブってしまうという不具合もあるようです。
ちょっといじってみました。このBBSだとソースを表示
した時に行頭の空白がカットされて見づらいので
以下に変更例を書いてみました。良いように思うのですが
いかがでしょうか

https://haik.oi21.net/index.php?test_canonical_20210225
Re: 【雑談】HAIKに搭載の #canonical の性質 使い方留意点
投稿日 : 2021/02/25(Thu) 14:52
投稿者 Yujiro
参照先
いしまるさん

コメントありがとうございます。

plugin/canonical.inc.php 

あー、ここら先はPHPの勉強せんといかんですね。
個人的にはこれ以上深入りできない分野で。

しかし、条件をちょっと書き足すか何かすればもっと実用的なプログラムに
なりそうなのは確か。

しかし・・・

>しないのは理由があるのでしょうかね。

これの検証をやってられないのが現実ですね。

そこで、少し面倒な回避策もあり・・・

外部のHAIKページの日本語ページ名部分を先にエンコードしておき、それをcanonical先
に指定する。

これは作動します。面倒ですが、現状の仕様ではこれがベストかもです。
Re: 【雑談】HAIKに搭載の #canonical の性質 使い方留意点
投稿日 : 2021/02/25(Thu) 11:07
投稿者 いしまる◆vOmCuTAP2Tw
参照先
日本語をエンコードすると良くなるのでしょうか。
そうならば、
plugin/canonical.inc.php の以下の部分を見直すと
httpで始まるURLでもエンコードするようになります。
しないのは理由があるのでしょうかね。

// URL
if (is_url($target))
{
$canonical_url = $target;
}
// Pagename
else if (is_page($target))
{
$canonical_url = $script . '?' . rawurlencode($target);
}
// Relative Path
else
{
$base_dir = dirname($script . 'dummy');
$canonical_url = $base_dir . '/' . $target;
}

- WEB PATIO -