我创建了一个扩展“ ContentPageMetaResolver”的页面,该页面实现了PageRobotsResolver
export class MyContentPageMetaResolver extends ContentPageMetaResolver implements
PageRobotsResolver {
pageType = PageType.CONTENT_PAGE;
pageTemplate = 'StaticContentPageTemplate';
resolveRobots(): Observable<PageRobotsMeta[]> {
return of(new Array(PageRobotsMeta.NOFOLLOW, PageRobotsMeta.NOINDEX));
}
}
因此,这会将以下条目添加到页面的head元素:
<meta name="robots" content="NOFOLLOW, NOINDEX">
现在我需要对关键字做同样的事情。任何想法如何创建自定义解析器实现?
PageRobotsResolver接口在page.resolvers.d.ts文件中是开箱即用的:
/**
* Resolves the robot information for the page. This is used by
* search engines to understand whether the page and subsequential links
* should be indexed.
*
*/
export interface PageRobotsResolver {
/**
* Resolves the robots for the page.
*
* @deprecated since version 1.3
* Use `resolveRobots()` instead.
*/
resolveRobots(...args: any[]): Observable<PageRobotsMeta[]>;
/**
* Resolves the robots for the page.
*/
resolveRobots(): Observable<PageRobotsMeta[]>;
}
并将以下内容添加到我的模块的提供者列表中:
@NgModule({
providers: [
{ provide: ContentPageMetaResolver, useExisting: MyContentPageMetaResolver }
]
})
答案 0 :(得分:0)
PageMetaResolver
使用 PageMetaService
来生成页面元数据。可以将特定的元数据添加到特定于 的解析程序中(即,在您的MyContentPageMetaResolver
中),也可以扩展PageMetaResolver
以收集所有解析器的其他元数据。
默认情况下,Spartacus在各种解析器上(从功能标志1.3
进行迭代),并且-如果实现了解析器,则将解析的数据添加到页面元模型中。这是在PageMetaService
中完成的,您可以可以(但不应;),请参见下文)扩展该服务中resolverMethods
的列表,以便调用您的自定义方法。
另一种(但不太灵活)的方法是提供自定义SeoMetaService
,并覆盖meta
设置器。此外,SeoMetaService
仅限于页面元数据,而PageMetaService
可以对应用程序的其他领域(例如结构数据)有所贡献。
在2020年使用关键字是否仍然是一个好主意,我建议您仔细阅读这一内容,因为爬虫似乎在很久以前就不再对此担心。这就是为什么我们没有在Spartacus中添加默认解析器的原因,但是如果您提出了很好的论据,我很想学习!