0

I need to change my meta tag to NOINDEX and NOFOLLOW for particular page (especially in product detail page) in magento 2. I have tried adding

<head>
    <meta name="robots" content="NOINDEX,NOFOLLOW"/>
</head>

and also

<reference name="head">
    <action method="setRobots"><value>NOINDEX,NOFOLLOW</value></action>
 </reference>

In layout update xml but not changing from default how to fix the issue.

P.S.:I need to update via magento 2 backend.

1

To resolve this issue, you can use event/Observer.

Create a small module.

Fire an Observer an observer on layout_load_before event. On this event make product details page is NOINDEX,NOFOLLOW.

Event.xml:

events.xml is located at app/code/{Vendor}/{Modulename}/etc/frontend/ code should be like that

<?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_load_before">
        <observer name="add_robot" instance="{Vendor}\{Modulename}\Observer\NoindexfollowOnProduct" />
    </event>    
</config>

Observer class

NoindexfollowOnProduct.php is located at app/code/{Vendor}/{Modulename}/Observer and the code should be like that

<?php
namespace {Vendor}\{Modulename}\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;

class NoindexfollowOnProduct implements ObserverInterface
{
    protected $request;

    protected $layoutFactory;

    public function __construct(
        \Magento\Framework\App\Request\Http $request,
        \Magento\Framework\View\Page\Config $layoutFactory
        ) {
            $this->request = $request;
            $this->layoutFactory = $layoutFactory;
    }
    public function execute(Observer $observer)
    {
        $fullActionName = $observer->getFullActionName();
        /* Check Current page  by full action */
        if ($fullActionName == "catalog_product_view"){
                $this->layoutFactory->setRobots('NOINDEX,NOFOLLOW');
        }

    }

}

Also, this module should have:

  1. app/code/{Vendor}/{Modulename}/etc/module.xml.
  2. app/code/{Vendor}/{Modulename}/composer.json
  3. . app/code/{Vendor}/{Modulename}/registration.json.

After adding the event you should flush the cache.

2
  • I need to add NOINDEX NOFOLLOW Only for selected product pages not all. Is that possible. Thanks – Kirouthika K Apr 10 '18 at 10:20
  • Yes, you can do for product wish. Inside if ($fullActionName == "catalog_product_view") you can get product object by $observer->getLayout()->getBlock('product.info')-.>getProduct() – Amit Bera Apr 10 '18 at 10:35
0
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <meta name="robots" content="NOINDEX,NOFOLLOW"/>
    </head>
</page>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.