1

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

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

3 回答 3

0

首先,Javascript 不会阻止 Google 索引该内容。

你为什么不想'满足于 NoFollowing 所有链接'?这正是 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; ?>
于 2013-03-12T01:41:36.987 回答
0

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

您最好根据当前与 php.ini 的会话隐藏分层导航。

<?php if (Mage::getSingleton('customer/session')): ?>
    ...your nav code...
<?php endif ?>
于 2013-03-12T01:17:36.597 回答
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>
于 2013-04-18T23:32:13.070 回答