Angularで自動でcanonicalタグを挿入する
2021/04/20
canonicalとは
canonicalとは、正式なURLを検索エンジン側に伝えるURLの正規化を目的としたものです。link要素の中で使われる属性値で、head要素の中で使います。 anonicalを設定すると、複数の重複ページが存在している場合に、検索エンジンに優先させるべきページを伝えることでそれ以外のページは重複ページであることを伝える事ができます。
https://ferret-plus.com/1809 から引用
つまり重複してないコンテンツ(ページ)に対して設定する項目。
タグを生成してHeaderに突っ込むservice
import { Injectable, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
@Injectable({
providedIn: 'root'
})
export class CanonicalService {
constructor(
@Inject(DOCUMENT) private dom:any,
) { }
setCanonicalURL() {
this.deleteCanonicalURL();
const link: HTMLLinkElement = this.dom.createElement('link');
link.setAttribute('rel', 'canonical');
link.setAttribute('href', this.dom.URL);
this.dom.head.appendChild(link);
}
private deleteCanonicalURL() {
let doms = Array.from(this.dom.head.querySelectorAll("[rel='canonical']"));
doms.forEach((elm:any)=>{
this.dom.head.removeChild(elm);
})
}
}
使用例
@Component({
...
})
export class HogeComponent implements OnInit {
constructor(
private router:Router,
private canonicalService:CanonicalService
) {
this.router.events.pipe( filter(event => event instanceof NavigationEnd) ).subscribe(
(params: any) => {
this.canonicalService.setCanonicalURL();
}
);
}
...
}