我希望有人可以帮我这个问题,我一直在试图解决过去几天。 我想从整个搜索引擎隐藏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的头部,所以如果实现是复杂的,我可能需要一些说明。
谢谢。
布兰顿
万一有人仍然认为这古老的问题:
从谷歌的难言之隐(或试图这样做)基于会话/曲奇/用户代理是不是一个好主意。 谷歌不喜欢被人骗了,但希望看到的网站就像任何其他客人。
robots.txt的,相对= nofollow的等还没有完全解决这个问题,或者至少有一些缺点或限制。
隐藏分层导航的爬虫和修复所造成的分层导航网址数量庞大的SEO问题的更好,更完美的解决方案将使用PRG模式 。
这就像一个魅力,即在不改变关于分层导航和100%可靠地防止履带从无用的重复内容的网址抓取浪费预算方面的UX。
简单地说,它是关于将用户重定向到原来的分层导航/ URL过滤器前,用POST请求(该搜索引擎爬虫不要跟随)代替GET请求,分层导航/过滤URL。
有关详细信息,并阅读,请参阅
- 详细说明含。 样品请求流
- 为什么robots.txt的,相对= nofollow的等在这里没有令人满意的解决方案
- PRG模式的Magento 2扩展
- PRG模式演示
我不知道,如果谷歌机器人将可靠地分析你的JavaScript。
你可能会更好躲在基于与PHP当前会话中的分层导航。
<?php if (Mage::getSingleton('customer/session')): ?>
...your nav code...
<?php endif ?>
首先,使用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; ?>
这是一个漂亮的主题。 我们用这个代码隐藏从谷歌的分层导航,但我们不能肯定是它的工作...
<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>