Столкнувшись с той же проблемой, я искал вокруг и нашел руководство о том, как это сделать:
https://www.concretepage.com/angular/angular-title-service-and-canonical-url
Он использует Angular 6, но я думаю, что он обратно совместим с5.
В основном предлагается создание службы (SEOService) для облегчения создания канонической ссылки везде, где она вводится.Он внедряет объект Angular DOCUMENT
в службу и создает элемент канонической ссылки как HTMLLinkElement
.
. Он заботится о том, чтобы решение было удобным для рендеринга / рендеринга на стороне сервера - так что, если вы хотите лучшеКонтролируйте свой SEO для страниц в вашем приложении, я считаю, что это то, что вы хотите.
Вот минимальное переписывание сервиса из статьи:
seo.service.ts
import { Injectable, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
@Injectable({
providedIn: 'root'
})
export class SeoService {
constructor(@Inject(DOCUMENT) private doc) {}
createLinkForCanonicalURL() {
let link: HTMLLinkElement = this.doc.createElement('link');
link.setAttribute('rel', 'canonical');
this.doc.head.appendChild(link);
link.setAttribute('href', this.doc.URL);
}
}
И вот переписывание компонента, потребляющего услугу:
data.component.ts
import { Component, OnInit } from '@angular/core';
import { SeoService } from './seo.service';
@Component({
selector: 'app-data',
templateUrl: './data.component.html'
})
export class DataComponent implements OnInit {
constructor(private seoService: SEOService) { }
ngOnInit() {
this.createLinkForCanonicalURL();
}
createLinkForCanonicalURL() {
this.seoService.createLinkForCanonicalURL();
}
}
Youмог бы просто иметь метод createLinkForCanonicalURL()
, принимающий необязательный параметр URL, который вы хотели бы использовать в качестве канонической ссылки для страницы, для полного контроля.