我正在为 SEO 目的改进网站并遇到一个有趣的问题。除其他外,该站点还包括一个包含单个项目的大型目录(这些项目是什么并不重要)。每个项目都有自己的详细信息页面,可通过
访问http://www.mysite.com/item.php?id=item_id
或
http://www.mysite.com/item.php/id/title
这个目录很大——里面有大约 100,000 个项目。自然地,在任何页面上都只列出了一些项目。例如,在主站点主页上,有大约 5 或 6 个项目的链接,在其他页面上有大约 12 个不同项目的链接,等等。
当真实用户访问该站点时,他们可以使用搜索表单按关键字或位置查找项目 - 因此会生成符合他们搜索条件的列表。但是,例如,当 google 爬虫访问该站点时,它甚至不会尝试将文本放入关键字搜索字段并提交表单。因此,就机器人而言,在为整个站点编制索引后,它最多只覆盖了几十个项目。自然地,我希望它分别为每个单独的项目编制索引。我在这里有哪些选择?
我考虑的一件事是检查用户代理和 IP 范围,如果请求者是机器人(我能说的最好),则在最相关页面的末尾添加一个 div,其中包含指向每个单独项目的链接。是的,这将是一个巨大的页面加载 - 我不确定 google bot 对此会有何 react 。
还有什么我可以做的吗?这里的最佳做法是什么?
提前致谢。
最佳答案
One thing I considered is to check the user agent and IP ranges and if the requestor is a bot (as best I can say), then add a div to the end of the most relevant page with links to each individual item. Yes, this would be a huge page to load - and I'm not sure how google bot would react to this.
那将是一件非常的坏事。专门为搜索引擎的利益提供不同的内容称为 cloaking并且是让您的网站被禁止的好方法。甚至不考虑它。
每当网站管理员担心将其网页编入索引时,使用 XML 站点地图是确保搜索引擎了解您网站内容的简单方法。如果您的站点是数据库驱动的,它们也很容易创建和更新。 XML 文件不必是静态的,因此您可以在搜索引擎请求时动态生成它(Google、Yahoo 和 Bing 都支持 XML 站点地图)。您可以在 sitemaps.org 找到有关 XML 站点地图的更多信息。 .
如果您想让搜索引擎可以访问您的内容并希望从语义标记(即 HTML)中获益,您还应该确保可以通过超链接访问您的所有内容(换句话说,不是通过表单提交或 JavaScript) .这样做的原因有两个:
拥有一个以某种方式链接到您的所有产品的 HTML 站点地图是确保搜索引擎和用户可以轻松找到您的所有产品的好方法。还建议您构建站点,使更重要的页面更靠近网站的根目录(主页),然后当您分支到子页面(类别),然后到特定项目。这让搜索引擎知道哪些页面是重要的,并帮助他们组织它们(这有助于他们对它们进行排名)。它还可以帮助他们从上到下跟踪这些链接并找到您的所有内容。
Each item has its own details page, which is accessed via
http://www.mysite.com/item.php?id=item_id
or
这对 SEO 也不利。当您可以使用两个不同的 URL 调出同一页面时,您的网站上就有重复的内容。谷歌正在努力提高其索引的质量,他们认为重复的内容质量低下。他们臭名昭著的 Pandas 算法部分用于查找和惩罚内容质量低的网站。考虑到您拥有多少产品,您迟早会因此受到处罚。幸运的是,解决方案很简单。你只需要 specify a canonical URL为您的产品页面。我推荐第二种格式,因为它对搜索引擎更友好。
阅读my answer to an SEO question at the Pro Webmaster's site有关 SEO 的更多信息。
关于SEO:允许爬虫在一次只有少数页面可见时索引所有页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10230411/
我正在编写一个方法,它将在一个类中定义一个实例方法;类似于attr_accessor:classFoocustom_method(:foo)end我通过将custom_method函数添加到Module模块并使用define_method定义方法来实现它,效果很好。但我无法弄清楚如何考虑类(class)的可见性属性。例如,在下面的类中classFoocustom_method(:foo)privatecustom_method(:bar)end第一个生成的方法(foo)必须是公共(public)的,第二个(bar)必须是私有(private)的。我怎么做?或者,如何找到调用我的cust
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie
我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用:
如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e
我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.
我正在为锦标赛开发一个Rails应用程序。我在这个查询中使用了三个模型:classPlayertruehas_and_belongs_to_many:tournamentsclassTournament:destroyclassPlayerMatch"Player",:foreign_key=>"player_one"belongs_to:player_two,:class_name=>"Player",:foreign_key=>"player_two"在tournaments_controller的显示操作中,我调用以下查询:Tournament.where(:id=>params
据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b
我读过这个:Let’sstartwithasimpleRubyprogram.We’llwriteamethodthatreturnsacheery,personalizedgreeting.defsay_goodnight(name)result="Goodnight,"+namereturnresultend我的理解是,方法是定义在类中的函数或子程序,可以关联到类(类方法)或对象(实例方法)。那么,如果它不是在类中定义的,怎么可能是方法呢? 最佳答案 当你在Ruby中以这种方式在全局范围内定义一个函数时,它在技术上变成了Obje
我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,