[Sitecore]使用されていないメディアアイテムを削除
検証環境:Sitecore 9.2.0
概要:
使用されていないメディアアイテムを削除する際に学んだことの心得です。
きっかけ:
お客さんによって、サイトは最新版まだ、結構新しいバージョンのサイトコアを使用されている場合があれば、かなり以前のバージョンから、アップグレードしてきた場合もあります。長年にかけて、違うコンテントエディタによって、メディアアイテムの構造が管理できず、使用されていないディアアイテムが増えてい行くことがよくあります。ディアアイテムが使用されていなくでもインデックスされるし、使用されていないものを削除したい。
質問:
1.どうやって、ディアアイテムが使用されていないことを確定するのか。
2.どうやって、使用されていないディアアイテムが削除したことで、リンク切れ発生しないことを確認するのか。
どうやって、ディアアイテムが使用されていないことを確定するのか。
最初に思ったのは、サイトコアのリンクデータベースを再構築してから、リンクレファレンスがあるかどうかを確認すればよいのではないかと思った。
Function HasReference {
param(
[Item] $Item
)
$linkDb = [Sitecore.Globals]::LinkDatabase
if ($linkDb.GetReferrerCount($Item) -gt 0) {
$links = $linkDb.GetReferrers($Item)
foreach ($link in $links) {
$linkItem = Get-Item -Path master:\ -ID $link.SourceItemID
if ($linkItem) {
return $true;
}
}
}
return $false;
}
return $false;
}
しかし、サイトコアのアイテムリンクレファレンスだけでは下記のレファレンスが確認されていない場合があります。
1.RTEフィールドにて、直接メディアライブラリーのパスを使って参照されている場合これは以前バージョンのサイトコアで使われていた。
<image mediaid="…" mediapath="…" src="…" />
対策として、スクリプトを使って、RTEフィールドにメディアライブラリーのパス参照を更新する。
2.RTEフィールドにて、直接サイトのアドレスを使って参照されている場合
"www.test.com/-/media/images/home-page/test_260x140.jpg"
対策として、スクリプトを使って、外部参照のパスを取得して、もしレファレンスしているアイテムがメディアライブラリーにあるのなら、パス参照を更新する。もし存在しない場合は、可能なら、ダウンロードして、メディアライブラリーへ保存して、パス参照を更新する。
< img alt="" src="/-/media/home/page/staion-landing/station_Icon.png" >
- Controllerまた、Chtmlにて直接、アイテムパスまた、GUIDを使って参照している場合。
- フロントエンド コード(Jquery, js, Vue react…)にて直接、アイテムパスまた、GUIDを使って参照している場合。
- コンフィグファイルにて直接、アイテムパスまた、GUIDを使って参照している場合。
対策として、テキスト検索のツールを使って、ソリューションコードに検索をかけ、レファレンスを確認します。
”/media/”や”src=”を使って簡単なものをすぐに見つかりますが、フロントエンドフレームワークによって、レファレンスの参照も違ってきます。パスだけではなく、GUIDで参照する場合の検知が難しくなります。
4.ほかに案外なところ
サイトコアにてRTE フィールド以外のことろにレファレンスもある可能性があります。リンクファイルやツリーリストなど、GUIDで参照している場合はサイトコアのリンクレファレンスで検知してくれます。問題となるのはテキストフィールドとRTEフィールドです。
私の場合は、スクリプトを使ってすべてのテキストファイルとRTEファイルをサイト全体検知をすることでレファレンスを見落としないようししました。
案外なところと言えば、ディクショナリのPhraseにて違うアイコンイメージを参照しているアイテムでした。。。
どうやって、使用されていないディアアイテムが削除したことで、なリンク切れ発生しないことを確認するのか。
参照されているメディアアイテムが間違って削除した場合は、最も明らかなエラーはリンク切れ(404)です。ウェブサイトSEOチェッカーまた、ウェブクローラーサービスを使って、メディアアイテムを削除する前と後にレポートを生成し、リンク切れの数に変化があるかどうかを確認すればいい。
いくつか知られているツール:
しかし、ソリューションコードにて直接参照している場合、もし参照しているファイルが存在しない場合、エラーハンドリングによって、404として表示されず、Rendering自体が隠された場合、SEOツールでの検知ができない。その際に、無料なサイトをオフラインにコピーするツールを使うのがお勧めです。
例えば、サイトマップをエクスポートして、HTTrackのような無料なツールを使って、ページリストをインポート、メディアアイテムを削除する前と後にこれらのページをローカールのコピー、比較して同じ結果であるかどうかを確認する。
以上、使用されていないメディアアイテムを削除する際に学んだことの心得でした。