从搜索引擎隐藏Magento的分层导航(Hiding Magento's Layered N

2019-10-17 20:03发布

我希望有人可以帮我这个问题,我一直在试图解决过去几天。 我想从整个搜索引擎隐藏Magento的分层导航,但其提供给用户。 对于搜索引擎优化的原因,我不想满足于不随着所有的链接,或使用NOINDEX遵循meta标签,或甚至完全使用robots.txt阻止它。 处理这种情况的最有效的方法是只显示分层导航使用cookie的用户启用,因为谷歌不使用cookies。 同样的效果也许可以用JavaScript实现为好,但我选择了Cookie的方法。

到目前为止,我已经成功地实现粗一块JS以检查是否启用了Cookie一旦在页面加载(改编自另一个线程在这个论坛)。 如果启用了Cookie,它什么都不做和分层导航显示器,但如果不启用饼干,我想删除“catalog.leftnav”块。 我不能为我的生活弄清楚如何从我的JS脚本做到这一点。 所有我已经能够实现的是去除的div元素,或设置的style.display为none等,而所有这些技术去除从前端的链接,谷歌仍然可以看到他们所有。 这里是我迄今为止在模板/目录/层/ filter.phtml代码示例

<div id="shop-by-filters">
  <ol>
    <?php foreach ($this->getItems() as $_item): ?>
    <li>
    <?php if ($_item->getCount() > 0): ?>
    <a href="<?php echo $this->urlEscape($_item->getUrl()) ?>" rel="nofollow"><?php echo $_item->getLabel() ?></a>
    <?php else: echo $_item->getLabel() ?>
    <?php endif; ?>
    <?php if ($this->shouldDisplayProductCount()): ?>
    (<?php echo $_item->getCount() ?>)
    <?php endif; ?>
    </li>
    <?php endforeach ?>
  </ol>
</div>

<script type="text/javascript">
if (navigator.cookieEnabled) {
    return true; 
} else if (navigator.cookieEnabled === undefined) {
    document.cookie = "testcookie";
    if (cookie_present("testcookie"))
        return true;   
} else {
var elem = document.getElementById('shop-by-filters');
elem.parentNode.removeChild(elem);
}
</script>

谁能帮我这个,还是有要去一个关于它的更好的办法? 请记住,我仍然在试图让我的周围Magento的头部,所以如果实现是复杂的,我可能需要一些说明。

谢谢。

布兰顿

Answer 1:

万一有人仍然认为这古老的问题:

从谷歌的难言之隐(或试图这样做)基于会话/曲奇/用户代理是不是一个好主意。 谷歌不喜欢被人骗了,但希望看到的网站就像任何其他客人。

robots.txt的,相对= nofollow的等还没有完全解决这个问题,或者至少有一些缺点或限制。

隐藏分层导航的爬虫和修复所造成的分层导航网址数量庞大的SEO问题的更好,更完美的解决方案将使用PRG模式 。

这就像一个魅力,即在不改变关于分层导航和100%可靠地防止履带从无用的重复内容的网址抓取浪费预算方面的UX。

简单地说,它是关于将用户重定向到原来的分层导航/ URL过滤器前,用POST请求(该搜索引擎爬虫不要跟随)代替GET请求,分层导航/过滤URL。

有关详细信息,并阅读,请参阅

  1. 详细说明含。 样品请求流
  2. 为什么robots.txt的,相对= nofollow的等在这里没有令人满意的解决方案
  3. PRG模式的Magento 2扩展
  4. PRG模式演示


Answer 2:

我不知道,如果谷歌机器人将可靠地分析你的JavaScript。

你可能会更好躲在基于与PHP当前会话中的分层导航。

<?php if (Mage::getSingleton('customer/session')): ?>
    ...your nav code...
<?php endif ?>


Answer 3:

首先,使用Javascript将无助于从索引的内容阻止谷歌。

你为什么不想要“满足于不随着所有链接”? 这正是nofollow的是。 你也可以告诉谷歌不注重预选赛/查询字符串网站管理员工具。

如果由于某种原因,你真的想隐藏谷歌该块,编辑模板和字符串比较$_SERVER['HTTP_USER_AGENT']针对谷歌的非常公开的在这里用户代理的列表http://support.google.com/webmasters/bin/ answer.py?hl=en&answer=1061943

编辑 - 字符串比较

<?php if (stripos($_SERVER['HTTP_USER_AGENT'], 'Googlebot') !== false): ?>
<div id="shop-by-filters">
  <ol>
    <?php foreach ($this->getItems() as $_item): ?>
    <li>
    <?php if ($_item->getCount() > 0): ?>
    <a href="<?php echo $this->urlEscape($_item->getUrl()) ?>" rel="nofollow"><?php echo $_item->getLabel() ?></a>
    <?php else: echo $_item->getLabel() ?>
    <?php endif; ?>
    <?php if ($this->shouldDisplayProductCount()): ?>
    (<?php echo $_item->getCount() ?>)
    <?php endif; ?>
    </li>
    <?php endforeach ?>
  </ol>
</div>
<?php endif; ?>


Answer 4:

这是一个漂亮的主题。 我们用这个代码隐藏从谷歌的分层导航,但我们不能肯定是它的工作...

<div id="filters-no-follow"></div>

<?php
function prepare_for_echo($string) {
$no_br = trim(preg_replace('/\s+/', ' ', $string));
$no_slashes = str_replace('\'', '\\\'', $no_br);
return $no_slashes;
}
?>

<script>
function please_enable_cookies() {
var f = document.getElementById('filters-no-follow');
f.innerHTML = '<div class="no-cookies-error">Enable cookies to choose filters.</div>';
}

function please_load_filters() {
var f = document.getElementById('filters-no-follow');
f.innerHTML = '<?php if ( !empty($filtersHtml) || !empty($stateHtml) ): ?>'
+ '\n<div class="block block-layered-nav">'
+ '\n    <div class="block-title">'
+ '\n        <strong><span><?php echo prepare_for_echo($this->__('Shop By')); ?></span></strong>'
+ '\n    </div>'
+ '\n    <div class="block-content">'
+ '\n        <?php echo prepare_for_echo($this->getStateHtml()); ?>'
+ '\n        <?php if ($this->canShowOptions()): ?>'
+ '\n        <p class="block-subtitle"><?php echo prepare_for_echo($this->__('Shopping Options')); ?></p>'
+ '\n        <dl id="narrow-by-list">'
+ '\n            <?php echo prepare_for_echo($filtersHtml); ?>'
+ '\n        </dl>'
+ '\n        <?php endif; ?>'
+ '\n    </div>'
+ '\n</div>'
+ '\n<?php endif; ?>';
}

function are_cookies_enabled()
{
    var cookieEnabled = (navigator.cookieEnabled) ? true : false;

    if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled)
    { 
        document.cookie="testcookie";
        cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false;
    }
    return (cookieEnabled);
}

if(are_cookies_enabled()) {
please_load_filters();
} else {
please_enable_cookies();
}
</script>


文章来源: Hiding Magento's Layered Navigation from Search Engines