如何使用自定义解析器添加自定义元数据,如 PageTitleResolver 、 PageDescriptionResolver 等

How to add a custom meta data using custom resolvers as PageTitleResolver , PageDescriptionResolver etc

我创建了一个扩展 "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));
}
}

因此,这是将以下条目添加到页面的头部元素:

<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 }
]
})

PageMetaResolverPageMetaService 用来生成页面元数据。可以在 specific 解析器中添加特定的元数据(即在您的 MyContentPageMetaResolver 中),或者您可以扩展 PageMetaResolver 以收集所有解析器的额外元数据。

默认情况下,Spartacus 迭代(从功能标志 1.3)各种解析器,并且 - 如果实现了解析器 - 将解析的数据添加到页面元模型。这是在 PageMetaService 中完成的,您 可以 (但不应该 ;),见下文)扩展该服务中 resolverMethods 的列表,以便您的自定义方法被调用。

另一种(但不太灵活)方法是提供自定义 SeoMetaService,并覆盖 meta setter。此外,SeoMetaService 仅限于页面元数据,而 PageMetaService 可用于应用程序的其他领域,例如结构数据。

在 2020 年使用关键字是否仍然是个好主意,我建议您继续阅读,因为爬虫似乎很久以前就不再为此担心了。这就是为什么我们没有在 Spartacus 中添加默认解析器的原因,但是如果您提出好的论据来这样做,我很想学习!