我希望有人可以帮助我解决过去几天我一直试图解决的问题。我想完全隐藏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,所以如果实施很复杂,我可能需要一些指示。
谢谢。
布伦登
答案 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 :(得分: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>