谷歌的爬虫无法理解自己的地图。如何解决?

12

我发现一些奇怪的单词(have,here,imagery,sorry)被谷歌爬虫作为关键词从我的网站抓取,但这些单词本不应该出现在我的网站上。

first site

似乎谷歌在抓取使用谷歌地图的页面时出现了错误,因此将这些错误字符串视为重要关键词!

我在两个网站中都使用了openlayers来显示地图。代码如下:

<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script src="http://maps.google.com/maps/api/js?v=3&amp;sensor=false"></script>
<script type="text/javascript">
$(function() {
  $("#mapOuter").html('<div class="thumbnail"><div id="map" style="height:250px"></div></div>')
  map = new OpenLayers.Map("map")
  //map.addLayer( new OpenLayers.Layer.OSM   ("OpenStreeetMap") )
  map.addLayer( new OpenLayers.Layer.Google("Google v3"     ) )
  vectors = new OpenLayers.Layer.Vector("vector")
  map.addLayer( vectors )

  map.addControl( new OpenLayers.Control.LayerSwitcher() );
  map.addControl( new OpenLayers.Control.Navigation({documentDrag:true}) );
  map.addControl( new OpenLayers.Control.PanZoom() );
  var in_options = {
      'internalProjection': map.baseLayer.projection,
      'externalProjection': new OpenLayers.Projection("EPSG:4326")
  };

    var lon=-57.954900
    var lat=-34.917000

  map.setCenter(new OpenLayers.LonLat(lon, lat) // Center of the map
    .transform(
      new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
      new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
    ), 15 // Zoom level
  )

});
</script>

如何修复此“错误”,以便Google爬虫可以从我的网站获取良好的内容?

奖励谷歌搜索(以显示这些错误已被索引)

Google search

更新,“解决方案”已应用:

我在网站中每个页面上都有一个不同的地图,最终我将所有地图都转换为图像,并只保留了一个互动地图,在那里我确实需要用户与坐标和映射相关的交互。我使用的解决方案导致我创建了一个开源的osm-static-maps。希望它能帮助别人!

该网站得到了多项改进:

  • 摆脱了谷歌网络管理员中的这些尴尬词语。
  • 使用具有“alt”HTML img属性的静态图像而不是“不可索引”的js地图来获得更相关的SEO。
  • 更快的页面加载(摆脱了所有映射库和瓦片加载)。
  • 更快的js性能(客户端需要处理更少的js)。
  • 提高用户体验:滚动页面会导致地图缩放而不是实际滚动(您可以认为这可以通过禁用地图滚动以缩放来解决,但它会导致用户期望在滚动时缩放地图,两种方式都是对和错的)。

不利方面是:

  • 更少的用户互动性(无聊的页面)。
  • 地图上的上下文信息更少(信息较少的地图)。

这两件事可以通过在用户单击地图img时加载地图来“修复”。坏处是,如果用户无意中点击地图img,则可能会将地图加载视为用户的意外行为。

编辑2

我基于此做了一个开源项目。请查看!https://github.com/jperelli/osm-static-maps

6个回答

3
很不幸,我也看到了很多这样的情况...我的假设是,Googlebot不会完全评估页面上的所有js代码,而是也会使用启发式算法。因此,获取不到图像(被索引)。基于这个假设,我做了以下几点:
  1. 创建一个带有“随机”ID(用于地图)和style="display: none;"的div

  2. 创建一个noscript标签,并在其中使用相同的“随机”ID的img标签(我在这里使用了静态地图图像作为备用方案,这也是无JS的备选方案)

  3. 创建一个(自定义的)javascript函数,其中必须传递唯一的ID来初始化您的地图并切换地图元素的显示样式为block。

到目前为止,没有地图的“抱歉,我们没有图像”被索引。
希望对你有所帮助。

很好的回答。我不明白的是“相同ID”部分。这不会在HTML验证中出现问题吗?还是说它应该具有相同的ID,因为它位于noscript标记内,因此使用ID进行对应?另一件事是,为什么它应该是随机的? - jperelli
1
我的猜测是,由于谷歌索引noscript标签,如果它尝试在img标签上构建地图,它将看到一个带有ID的“新”元素,这将导致失败。由于Googlebot(可能)仍然不总是完全执行JavaScript(而是部分执行),使用随机ID使部分执行更加困难。您也可以尝试使用非随机ID。 - Ronald Swets

2
也许您可以添加更具体的元标签,如:
<meta name="geo.region" content="US-WA" />



<meta name="geo.placename" content="Snohomish" />



<meta name="geo.position" content="-57.954900;-34.917000" />

还需要添加Matt Rowles的元描述和Google Webmasters中的一些词语过滤器。

我在Google网站管理员中找不到“词语过滤器”选项,但它听起来像是一个可能的解决方案! - jperelli
也许你可以看一下由谷歌提供支持的这个页面,它与网站管理员指南有关,以实现所需的质量,请访问[链接]https://support.google.com/webmasters/answer/35769?hl=en - Hashes

2
这个答案可能无法帮助您删除爬取页面的单词,但可以防止它们在下一次爬取后被添加。
由于您的问题可能与爬虫无法加载有效地图有关。目前不清楚为什么会出现这种情况。地图提供商可能正在阻止Google机器人。
无论如何,如果不太困难,我建议您在这里查看:

https://support.google.com/webmasters/answer/1061943?hl=en

创建一个用户代理列表,写在这里:
我会以“Googlebot”为例,但您应该使用包含每个被阻止的用户代理的列表。
if (navigator.userAgent !== 'Googlebot') {
   // load the map and other stuff
} else {
   // show a picture where the map should be or do nothing.
}

Google机器人执行JS,因此如果Google机器人无法加载它,则应该有效地防止出错。
你可以将浏览器的用户代理更改为“Googlebot”并加载你的页面。如果地图提供商阻止任何具有此用户代理的浏览器,则应该看到与Googlebot看到的完全相同。另一个问题是,Googlebot可能还有一些超时时间来防止加载过多数据,它不会加载图片。
添加保护可能有助于防止Google机器人实际加载地图,如果问题确实在地图中。

这会影响降低PageRank吗?因为试图从userAgent隐藏(作弊)内容。 - jperelli
很难说。我期望Google搜索引擎会根据网页内容而非加载方式来排名。如果所加载的内容相关,那么它不应该改变网页排名。图片或地图不应该有太大影响。我不期望Google搜索引擎把OCR识别的图片传递到索引内部图片内容,但谁知道呢。总之,在我看来真正重要的是网页加载后的内容。加载方式并不重要。 - Loïc Faure-Lacroix

1

1)也许在您的<head>标签中设置 Meta Description会超越此操作:

<meta name="description" content="This is an example of a meta description. This will often show up in search results.">

2)如果meta标签不起作用,我建议可能是因为在加载任何其他内容之前,在<body>中的第一件事情被渲染(或者看起来是尝试),是一个地图显示。

例如,如果您在<body>中的地图之前放置了一些介绍网站的<div><p>标签,您可能会避免这种情况。但是,我不能百分之百确定,您需要测试并查看结果(请告诉我们)。

如果您计划这样做,并且希望a)Google爬虫仍然可以捕获它,并且b)希望将实际的文字块本身隐藏起来,使观众无法看到(style="display: none;"style="position: absolute; left:-9999px;"),请自行决定(更多信息在此处)。


我尝试了这个方法来“覆盖”关键字,但似乎没有起作用。我认为问题出现在JavaScript执行时(因为由爬虫解析的错误生成的地图)。请注意,奇怪的单词不是站点的书面内容的一部分。 - jperelli
我意识到我有另一个网站也遇到了同样的问题,而且在地图渲染之前还有更多的内容。就好像这些文字代替了所有的地图瓦片,所以它们被重复显示了太多次,最终比页面上的实际内容更加重要,无论真正的内容是在之前还是之后。 - jperelli

0

你尝试过添加爬虫元标签吗?这真的很有帮助,可以在中尝试一下。

<meta name="robots" content="index, follow">

蜘蛛现在将索引您的整个网站,不仅会索引您网站的第一个网页,还会索引您的所有其他网页。

同时尝试使您的描述更加独特!更加强大,但不要过度使用关键词。

谢谢。


0
应用的“解决方案”: 我在网站中每个页面上都有一个不同的地图,最终我将所有地图转换为图像,并仅保留了一个需要用户与坐标和映射相关的交互式地图。我使用的解决方案导致我创建了一个开源的 [osm-static-maps][3]。希望能对某些人有所帮助!
该网站得到了几项改进:
  • 摆脱了 Google 网站管理员中的这些尴尬词语。
  • 使用具有“alt”HTML img 属性的静态图像而不是“无法索引”的 js 地图,从而实现更相关的 SEO。
  • 更快的页面加载(摆脱了所有映射库和瓦片加载)。
  • 更快的 js 性能(客户端要处理的 js 更少)
  • 改善了用户体验:滚动页面会导致地图缩放而不是实际滚动(您可以认为这可以通过禁用地图滚动来缩放来解决,但它会导致用户期望在滚动时缩放地图,两种方式都是[正确和错误的][4])。

不利之处是:

  • 较少的用户互动性(页面单调无味)。
  • 地图上的上下文较少(信息较少)。
这两个问题可以通过在用户单击地图图像时加载地图来“修复”。不好的一面是,如果用户无意中单击地图图像,则可能会将地图加载视为意外行为。 编辑2 我将其制作成了一个开源项目。请查看!https://github.com/jperelli/osm-static-maps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接