从搜索引擎隐藏Magento分层导航

时间:2013-03-11 23:21:36

标签: magento magento-1.7 layered-navigation

我希望有人可以帮助我解决过去几天我一直试图解决的问题。我想完全隐藏Magento的分层导航,但要让用户可以使用。出于搜索引擎优化的原因,我不想满足NoFollowing所有链接,或使用noindex跟随元标记,甚至完全用Robots.txt阻止它。处理此问题的最有效方法是仅显示启用Cookie的用户的分层导航,因为Google不使用Cookie。使用JavaScript也可能实现相同的效果,但我选择了Cookie方法。

到目前为止,我已经设法实现了一个原始的JS来检查一旦页面加载后是否启用了cookie(改编自该论坛上的另一个线程)。如果启用了cookie,它什么都不做,并且分层导航显示,但如果没有启用cookie,我想删除“catalog.leftnav”块。我不能为我的生活弄清楚如何从我的JS脚本中做到这一点。我所能实现的只是删除div元素,或将style.display设置为none等等,虽然所有这些技术都从前端删除了链接,但Google仍然可以看到它们。这是我目前在template / catalog / layer / 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,所以如果实施很复杂,我可能需要一些指示。

谢谢。

布伦登

4 个答案:

答案 0 :(得分:1)

以防万一有人仍然发现这个老问题:

基于Session / Cookie / User-Agent隐藏Google的内容(或尝试这样做)从来都不是一个好主意。 Google不喜欢被骗,但希望像其他访客一样看到该网站。

robots.txt,rel = nofollow等也不能完全解决此问题,或者至少存在一些缺点或限制。

一种更好,更优雅的解决方案,可以使用PRG Pattern为爬虫隐藏分层导航并解决由大量分层导航URL引起的SEO问题。

这就像一种魅力,我。 e。不会更改关于分层导航的UX,并且在防止爬网程序将爬网预算浪费在无用的重复内容URL上具有100%的可靠性。

简单地说,这是在将用户重定向到原始分层导航/过滤器URL之前,将GET请求替换为POST请求(搜索引擎抓取工具不会遵循的分层请求)到分层导航/过滤器URL。

有关更多详细信息和阅读,请参阅

  1. Detailed explanation incl. sample request flow
  2. Why robots.txt, rel=nofollow etc. are no satisfying solutions here
  3. PRG Pattern Magento 2 Extension
  4. PRG Pattern Demo

答案 1 :(得分:0)

我不确定Google机器人是否会可靠地解析您的JavaScript。

根据当前使用php的会话隐藏分层导航可能会更好。

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

答案 2 :(得分:0)

首先,Javascript无法阻止Google对该内容编制索引。

为什么你不想'拒绝所有的链接'?这正是NoFollow的用途。您还可以告诉Google不要关注网站站长工具中的限定符/查询字符串。

如果由于某种原因您真的想要隐藏Google的该块,请在此处编辑模板并将$_SERVER['HTTP_USER_AGENT']字符串与Google公开的用户代理列表进行比较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; ?>

答案 3 :(得分:0)

这是一个光滑的主题。我们使用此代码隐藏了Google的分层导航,但我们不确定它是否有效...

<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>