在Magento 2中,有许多选项可以帮助您优化搜索引擎。但是,当涉及类别页面时,您只能添加规范的元标记,这可能会带来很多不便。因此,在这篇文章中,我将告诉您在Magento 2中添加rel="next"
和rel="prev"
标记以支持具有分页内容的机器人的方法。
如何在Magento 2中添加Rel Prev,Next标签
- 步骤1:配置模块以查看特定事件
- 第2步:替换规范标签的默认设置
- 步骤3:添加
rel="prev"
并rel="next"
步骤1:配置模块以查看特定事件
有多种方法可以帮助您添加Rel Prev,Next标签。但是,我强烈建议使用事件观察器方法。为了使用此方法,您需要做的第一步是配置模块以查看特定事件。为此,您需要在扩展名etc / frontend文件夹中创建一个events.xml文件。然后,您可以创建观察者类。
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="layout_generate_blocks_after">
<observer name="categorySeo" instance="Mageplaza\Seo\Observer\Category" />
</event>
</config>
从上面的XML文件中,您可以看到正在观察的事件是layout_generate_blocks_after。由于上述事件不是类别页面所独有的,因此您需要检查是否已经在类别视图页面上。而且,由于完整的动作名称已包含在事件对象数据中,因此这并不是必需的。
if ('catalog_category_view' != $observer->getEvent()->getFullActionName()) {
return $this;
}
第2步:替换规范标签的默认设置
在默认实现中,尽管应用了页面或过滤器组合,规范标签始终指向根类别URL。
如果要删除默认的规范标签,则将需要类别模型实例。要检索它,可以使用注册表(current_category)。在下面的示例中,将使用布局对象,因为它是事件对象数据的一部分。
/** @var \Magento\Catalog\Block\Product\ListProduct $productListBlock */
$productListBlock = $observer->getEvent()->getLayout()->getBlock('category.products.list');
$category = $productListBlock->getLayer()->getCurrentCategory();
/**
* Remove default canonical tag
*/
if ($this->categoryHelper->canUseCanonicalTag()) {
$this->pageConfig->getAssetCollection()->remove($category->getUrl());
}
删除默认标签后,您现在可以添加自己的规范标签。要添加标签,您可以通过使用寻呼机块实例(\ Magento \ Theme \ Block \ Html \ Pager)生成规范URL,并使用页面配置(\ Magento \ Framework \ View \ Page \ Config)插入它。
/** @var \Magento\Catalog\Block\Product\ProductList\Toolbar $toolbarBlock */
$toolbarBlock = $productListBlock->getToolbarBlock();
/** @var \Magento\Theme\Block\Html\Pager $pagerBlock */
$pagerBlock = $toolbarBlock->getChildBlock('product_list_toolbar_pager');
$pagerBlock->setAvailableLimit($toolbarBlock->getAvailableLimit())
->setCollection($productListBlock->getLayer()->getProductCollection());
/**
* Add rel canonical with page variable
*/
$this->pageConfig->addRemotePageAsset(
$this->getPageUrl([
$pagerBlock->getPageVarName() => $pagerBlock->getCurrentPage()
]),
'canonical',
['attributes' => ['rel' => 'canonical']]
);
您可能会注意到,我刚刚显示的方法是getPageUrl,可以在\ Magento \ Theme \ Block \ Html \ Pager类中找到它。但是,我对它进行了一些自定义,使其更适合。
/**
* Retrieve page URL by defined parameters
*
* @param array $params
* @return string
*/
protected function getPageUrl($params = [])
{
$urlParams = [];
$urlParams['_current'] = false;
$urlParams['_escape'] = true;
$urlParams['_use_rewrite'] = true;
$urlParams['_query'] = $params;
return $this->urlBuilder->getUrl('*/*/*', $urlParams);
}
步骤3:添加rel="prev"
并rel="next"
这是添加过程的最后一步。在此步骤中,您将添加rel="prev"
和rel="next"
指示分页的内容。添加这些内容时,搜索引擎机器人将按照您想要的顺序处理这些页面。然后,将合并他们的喜好属性,通常会将客户发送到首页。
/**
* Add rel prev and rel next
*/
if (1 < $pagerBlock->getCurrentPage()) {
$this->pageConfig->addRemotePageAsset(
$this->getPageUrl([
$pagerBlock->getPageVarName() => $pagerBlock->getCollection()->getCurPage(-1)
]),
'link_rel',
['attributes' => ['rel' => 'prev']]
);
}
if ($pagerBlock->getCurrentPage() < $pagerBlock->getLastPageNum()) {
$this->pageConfig->addRemotePageAsset(
$this->getPageUrl([
$pagerBlock->getPageVarName() => $pagerBlock->getCollection()->getCurPage(+1)
]),
'link_rel',
['attributes' => ['rel' => 'next']]
);
}
结论
完成上述所有步骤之后,您现在将拥有一个可运行的代码,可以帮助您向Magento 2 添加规范标签rel="prev"
和rel="next"
元标签。尽管这不是SEO的完整解决方案,但仍然可以很好地解决默认漏洞。功能