Magento – How to add NOINDEX NOFOLLOW in product page for magento 2

magento2

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.

Best Answer

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.