如何在Magento 2中添加Rel Prev,Next标签

在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的完整解决方案,但仍然可以很好地解决默认漏洞。功能

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论