2

我创建了一个扩展“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 }
]
})
4

1 回答 1

0

PageMetaResolver被用于PageMetaService生成页面元数据。特定的元数据可以添加到特定的解析器(即在您的MyContentPageMetaResolver)中,或者您可以扩展PageMetaResolver以收集所有解析器的附加元数据。

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

另一种(但不太灵活)的方法是提供一个 custom SeoMetaService,并覆盖metasetter。此外,SeoMetaService它仅限于页面元数据,而PageMetaService可以贡献于应用程序的其他领域,例如结构数据。

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

于 2020-02-27T08:58:23.720 回答