61阅读

搜索引擎如何抓取网页-网站设计如何让搜索引擎更加友好

发布时间:2017-08-18 所属栏目:建站

一 : 网站设计如何让搜索引擎更加友好

网站流量的来源很大一部分关键在于搜索引擎,搜索引擎所占的比重很大。因此在网站的运营过程中,必须让搜索引擎更加友好对待网站,让网站展现效果得到最大化体现。很多的站长朋友很注重网站的友好度,但是他们往往忽略了网站本身的结构,其原因是网站设计者与网站运营者并非同一人,协调上存在一定的误差,然而,某些误差会网站对搜索引擎不友好。在网站设计过程中,需要注意哪些问题才能够让搜索引擎更加友好呢?

1、 需要可索引的内容

虽然搜索引擎在不断的完善以及开发新的功能,但是相对而言,还是存在很多难关,像flash,java应用和其他非文字性内容很难被搜索蜘蛛所看到,因此为了让搜索蜘蛛能够充分识别内容,建议以及必须采用html文字形式,因为内容是丰富网站的基础,也是为了让网站在搜索引擎中更好的排名。

可索引的内容其实还包含了内容质量,百度搜索引擎开始实行《百度原创星火计划》将内容的高度又以提升,可见未来的发展趋势更加注重内容的高质量性,因此想获得蜘蛛更好的索引内容,也就必须创造独一无二的内容,独一无二必须体现在:绝对原创,观点独到,实时把握,掌握需求。

2、需要可爬行的链接结构

互联网是由无数的蜘蛛网编织而成,想要让网站更好的收录,也就是说索引更多的链接,就必须做好可爬行的链接结构,链接结构非常重要,直接关系到搜索蜘蛛能够在最短的时间内爬行到更多的链接,也就是考核蜘蛛的有效性,当然更是考核网站的链接结构。

导航链接:导航链接是毋庸置疑非常重要的,然而很多网站在这里犯了致命错误,将导航隐藏起来或者不清晰,甚至采用flash,javascript和图片样式,很难然让搜索蜘蛛爬行,导致索引存在问题,

结构推荐链接:网站设计过程中,无论在首页,频道页,还是内容页面都会设置推荐链接,然而,很大一部分站长朋友没有仔细揣摩,常常出现同一个页面中出现多次相同链接,其实这样的意义不大,应该尽量避免,并且更应该做到广而集。

题外话:网站设计后,更需要站长朋友丰富网站内容,创造内容的同时也需要做好链接策略,出了需要相关性内容的推荐,同时还应该做好前因后果的补充,这一点被很多站长朋友所忽略了。

需要注意的是:虽然网站设计者很难能够将链接结构设计的十全十美,但是站长朋友可以采取必要的措施将其逐步完善,Sitemap.xml网站地图能够让蜘蛛更加快速有效的了解网站链接结构,更好的爬行。而Robots.txt文件的设置更是让蜘蛛免去了爬行哪些“无关精要的页面”。还有Nofflow和Canonical标签更是为了防止分散权重和集中布局权重。

3、 需要符合逻辑的网站架构

网站架构是网站设计中最重要的环节,主要考虑网站主题分层系统的结构和流动,一般把网站架构分为扁平模式和纵深模式,扁平模式主要运用于结构较简单的网站,比如:个人博客,小型企业网站等,而纵深模式主要运用于结构较复杂的网站,像平时的论坛,社区以及中大型企业网站,因为纵深模式便于更好的管理,以便搜索蜘蛛更好的爬行。

需要注意的是:在设计纵深模式事,链接应该做到相互呼应,层次结构应该清晰,混乱的链接结构容易导致搜索蜘蛛爬行无用功,同时还需要注意细节问题,像列表页该如何设置能够让搜索引擎蜘蛛爬行的同时,更加注重用户体验呢?这直接关系到权重的传递。

文章来源:http://www.jiagongjueyuanban.com,作者:杨小强,转载请注明。

注:相关网站建设技巧阅读请移步到建站教程频道。

二 : 搜索引擎如何抓取你的网页

搜索引擎优化(SEO)是搜索引擎有好的收录网页的过程,适当的SEO有利于蜘蛛爬行你的网站,使你的内容符合搜索引擎算法,以便确认它与关键词高度相关。

优化的目的就是使网页的内容便于蜘蛛理解,下面我就以百度新收录的一篇内容来进行说明,我以一个完整标题进行搜索,其目的是能反映出更多关键词在百度自然搜索的结果页面,能更好的说明搜索引擎是如何抓取你的网页的。

搜索引擎如何抓取你的网页 页面抓取

(图一:百度最常见的自然搜索结果列表)

SEOer通常关注的是网页主体部分的自然搜索结果,百度和Google搜索结果页面大致相同,搜索结果页面通常为顶部、右侧、尾部均为广告链接,热门关键词会有广告,而我用这么长的词语就属于冷门词语,没有广告。

页面标题很重要

如图一所示,搜索引擎通常抓取的页面标题是HTML代码中的标题Title部分,所以说页面标题是写法对搜索引擎排名有重要的意义,通常页面标题Title的优化格式为:文章标题——栏目标题——网站标题。

它不一定只展示description

而第二行的描述部分通常会截取description部分,但更多时候会抓取正文的前200字,如果你要说具体显示description还是截取正文,是和用户搜索的关键词有关。比如图一中,百度截取了<h[www.61k.com)1>中的关键词,因为卢松松博客的中有“互联网”这个关键词。下图能直观的反应出这些问题。

搜索引擎如何抓取你的网页 页面抓取

(图二:搜索引擎抓取的关键词分布一览)

把图一和图二结合起来看,我们就能清楚的分辨出,百度到底展示了网页的哪些部分,title、<h1>、截取正文和内容部分的关键词。;

用户搜索的关键词在搜索结果中都用红色高亮显示,用户可以非常迅速地看到该网页是否是自己想要的,通常百度和Google的搜索结果类似,我在这里就不多说了。

关键词的密度与分布

通过上面两张图,可以看出我搜索的有两大关键词“互联网”和“香港人”,通过图二我们可以看出,这两个关键词在我列出的6大部分中都有显示,它们均匀的分布在内容的各个部分,尤其是标题和title部分。当然由于我搜索关键词的问题,把整个标题都搜了一遍,所以分布的比较均匀。

而关键词的密度,至少我从来就没有在意过,如果在写文章的同时还考虑关键词密度的话是很累的。

我想,通过以上简单分析,大家应该能大致了解搜索引擎抓取你网页的什么部分了吧?

三 : 搜索引擎如何抓取网页和如何索引

  1、Meta标签优化

  主要包括主题(Title),网站描述(Description),和关键词(Keywords),我们更加关注的是比赛要求的关键词和相关长尾关键词,还有一些其它的隐藏文字比如Author(作者),Category(目录)网站[www.61k.com]优化服务,Language(编码语种)等,这些基础优化工作都是相当重要。

2、了解搜索引擎如何抓取网页和如何索引网页

  你需知道一些搜索引擎的基本工作原理,各个搜索引擎之间的区别,搜索如何进行工作,搜索引擎如何对搜索结果进行排序等等

  3、如何选取关键词并在网页中放置关键词

  搜索就得用关键词。关键词分析和选择是SEO搜索引擎优化最重要的工作之一。首先要给网站确定主关键词(一般在五个上下),然后针对这些关键词进行优化,包括关键词密度(Density),相关度(Relavancy),突出性(Prominency)等等。

  4、了解主要的搜索引擎

  虽然搜索引擎有成千上万,但是对网站流量起决定作用的就那么几个。比如英文的主要有Google,Inktomi,Altavista等;中文的有百度,搜狐等。不同的搜索引擎对页面的抓取和索引、排序的规则都不一样。还要了解各搜索门户和搜索引擎之间的关系,比如Yahoo和AOL网页搜索用的是Google的搜索技术,MSN用的是Looksmart和Open Directory的技术。

  5、主要的互联网目录

  Yahoo自身不是搜索引擎,而是1个大型的网站目录,OpenDirectory也不是,他们和搜索引擎的主要区别是网站内容的收集方式不同。目录是人工编辑的,主要收录网站主页;搜索引擎是自动收集的,除了主页外还抓取大量的内容页面。

  6、按点击付费的搜索引擎

  搜索引擎也需要赢利,随着互联网商务的越来越成熟,收费的搜索引擎也开始大行其道。最典型的有Overture和百度,当然也包括Google的广告项目GoogleAdwords。越来越多的人通过搜索引擎的点击广告来定位商业网站,这里面也大有优化和排名的学问,你得学会用最少的广告投入获得最多的点击。

 7、链接交换和链接广泛度(Link Popularity)

  网页内容都是以超文本(Hypertext)的方式来互相链接的,网站之间也是如此。除了搜索引擎以外,人们也每天通过不同网站之间的链接来Surfing(“冲浪”)。其它网站到你的网站的链接越多,你也就会获得更多的访问量。更重要的是,你的网站的外部链接数越多,会被搜索引擎认为它的重要性越大,从而给你更高的排名。所以,你得花很多精力去做和别人做交换链接。[

  8、搜索引擎登录

  网站做完了以后,别躺在那里等着客人从天而降。要让别人找到你,最简单的办法就是将网站提交(submit)到搜索引擎。虽然免费已不再是互联网(至少是搜索引擎)的主流-如果你的是商业网站,主要的搜索引擎和目录都会要求你付费来获得收录,但是好消息是(至少到目前为止)最大的搜索引擎Google目前还是免费,而且它主宰着60%以上的搜索市场。

 

四 : 如何读取Lucene索引数据 - lewutian@126的日志 - 网易博客

本文要介绍一下如何利用IndexReader获取信息。为什么要读索引呢?因为我需要实现这些功能:

(1) 统计term在整个collection中的文档频度(document frequency, DF);

(2) 统计term在整个collection中出现的词次(term frequency in whole collection);

(3) 统计term在某个文档中出现的频度(term frequency, TF);

(4) 列出term在某文档中出现的位置(position);

(5) 整个collection中文档的个数;

那么为什么要用到这些数据呢?这些数据是实现TR(Text Retrieval,文本检索)的必备的“原料”,而且是经过加工的。在检索之前,只有原始文本(raw data);经过索引器(indexer)的处理之后,原始文本变成了一个一个的term(或者token),然后被indexer纪录下来所在的位置、出现的次数。有了这些数据,应用一些模型,就可以实现搜索引擎实现的功能——文本检索。

聪明的读者您可能会说,这看起来似乎很好做,不过就是计数(count)么。不错,就是计数,或者说是统计。但是看似简单的过程,如果加上空间(内存容量)的限制,就显得不那么简单了。假设如果每篇文档有100个term,每个term需要存储10字节信息,存1,000,000篇文档需要 10x100x10^6=10^9=2^30字节,也就是1GB。虽然现在1G内存不算什么,可是总不能把1GB的数据时时刻刻都放入内存吧。那么放入硬盘好了,现在需要用数据的时候,再把1GB数据从硬盘搬到内存。OK,可以先去冲杯咖啡,回来在继续下面的操作。这是1,000,000的文档,如果更多一点呢,现在没有任何辅助数据结构的方式,会导致很差的效率。

Lucene的索引会把数据分成段,并且在需要的时候才读,不需要的时候就让数据乖乖地呆在硬盘上。Lucene本身是一个优秀的索引引擎,能够提供有效的索引和检索机制。文本的目的是,介绍如用利用Lucene的API,如何从已经建好的索引的数据中读取需要的信息。至于Lucene如何使用,我会在后续的文章中逐渐介绍。

我们一步一步来看。这里建设已经有实现建好索引,存放在index目录下。好,要读索引,总得先生成一个读索引器(即Lucene中IndexReader的实例)。好,写下面的程序(程序为C#程序,本文使用DotLucene)。

IndexReader reader;

问题出来了,IndexReader是一个abstract类,不能实例化。那好,换派生类试试看。找到IndexReader的两个孩子——SegmentReader和MultiReader。用哪个呢?无论是哪个都需要一大堆参数(我是颇费了周折才搞清楚它们的用途,后面再解释),似乎想用Lucene的索引数据不是那么容易啊。通过跟踪代码和查阅文档,我终于找到使用IndexReader的钥匙。原来IndexReader有一个“工厂模式”的static interface——IndexReader.Open。定义如下:

#0001 public static IndexReader Open(System.String path)

#0002 public static IndexReader Open(System.IO.FileInfo path)

#0003 public static IndexReader Open(Directory directory)

#0004 private static IndexReader Open(Directory directory, bool closeDirectory)

其中有三个是public的接口,可供调用。打开一个索引,就是这么简单:

#0001 IndexReader reader = IndexReader.Open(index);

实际上,这个打开索引经历了这样的一个过程:

#0001 SegmentInfos infos = new SegmentInfos();

#0002 Directory directory = FSDirectory.GetDirectory(index, false);

#0003 infos.Read(directory);

#0004 bool closeDirectory = false;

#0005 if (infos.Count == 1)

#0006 {

#0007 // index is optimized

#0008 return new SegmentReader(infos, infos.Info(0), closeDirectory);

#0009 }

#0010 else

#0011 {

#0012 IndexReader[] readers = new IndexReader[infos.Count];

#0013 for (int i = 0; i < infos.Count; i++)

#0014 readers[i] = new SegmentReader(infos.Info(i));

#0015 return new MultiReader(directory, infos, closeDirectory, readers);

#0016 }

首先要读入索引的段信息(segment information, #0001~#0003),然后看一下有几个段:如果只有一个,那么可能是优化过的,直接读取这一个段就可以(#0008);否则需要一次读入各个段(#0013~#0014),然后再拼成一个MultiReader(#0015)。打开索引文件的过程就是这样。

接下来我们要看看如何读取信息了。用下面这段代码来说明。

#0001 public static void PrintIndex(IndexReader reader)

#0002 {

#0003 //显示有多少个document

#0004 System.Console.WriteLine(reader + "\tNumDocs = " + reader.NumDocs());

#0005 for (int i = 0; i < reader.NumDocs(); i++)

#0006 {

#0007 System.Console.WriteLine(reader.Document(i));

#0008 }

#0009

#0010 //枚举term,获得<document, term freq, position* >信息

#0011 TermEnum termEnum = reader.Terms();

#0012 while (termEnum.Next())

#0013 {

#0014 System.Console.Write(termEnum.Term());

#0015 System.Console.WriteLine("\tDocFreq=" + termEnum.DocFreq());

#0016

#0017 TermPositions termPositions = reader.TermPositions(termEnum.Term());

#0018 int i = 0;

#0019 int j = 0;

#0020 while (termPositions.Next())

#0021 {

#0022 System.Console.WriteLine((i++) + "->" + " DocNo:" + termPositions.Doc() + ", Freq:" + termPositions.Freq());

#0023 for (j = 0; j < termPositions.Freq(); j++)

#0024 System.Console.Write("[" + termPositions.NextPosition() + "]");

#0025 System.Console.WriteLine();

#0026 }

#0027

#0028 //直接获取 <term freq, document> 的信息

#0029 TermDocs termDocs = reader.TermDocs(termEnum.Term());

#0030 while (termDocs.Next())

#0031 {

#0032 System.Console.WriteLine((i++) + "->" + " DocNo:" + termDocs.Doc() + ", Freq:" + termDocs.Freq());

#0033 }

#0034 }

#0035

#0036 // FieldInfos fieldInfos = reader.fieldInfos;

#0037 // FieldInfo pathFieldInfo = fieldInfos.FieldInfo("path");

#0038

#0039 //显示 term frequency vector

#0040 for (int i = 0; i < reader.NumDocs(); i++)

#0041 {

#0042 //对contents的token之后的term存于了TermFreqVector

#0043 TermFreqVector termFreqVector = reader.GetTermFreqVector(i, "contents");

#0044

#0045 if (termFreqVector == null)

#0046 {

#0047 System.Console.WriteLine("termFreqVector is null.");

#0048 continue;

#0049 }

#0050

#0051 String fieldName = termFreqVector.GetField();

#0052 String[] terms = termFreqVector.GetTerms();

#0053 int[] frequences = termFreqVector.GetTermFrequencies();

#0054

#0055 System.Console.Write("FieldName:" + fieldName);

#0056 for (int j = 0; j < terms.Length; j++)

#0057 {

#0058 System.Console.Write("[" + terms[j] + ":" + frequences[j] + "]");

#0059 }

#0060 System.Console.WriteLine();

#0061 }

#0062 System.Console.WriteLine();

#0063 }

#0004 计算document的个数

#0012~#0034 枚举collection中所有的term

其中#0017~#0026 枚举每个term在出现的document中的所有位置(第几个词,从1开始计数);#0029~#0033 计算每个term出现在哪些文档和相应的出现频度(即DF和TF)。

#0036~#0037在reader是SegmentReader类型的情况下有效。

#0040~#0061可以快速的读取某篇文档中出现的term和相应的频度。但是这部分需要在建索引时,设置storeTermVector为true。比如

doc.Add(Field.Text("contents", reader, true));

其中的第三项即是。默认为false。

有了这些数据,就可以统计我需要的数据了。以后我会介绍如何建立索引,如何应用Lucene。

from:http://lqgao.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3dInside%2520Lucene

http://hi.baidu.com/lewutian推荐文章:

1. Lucene(Nutch)距离商业文本搜索引擎还有多远?

2. Lucene学习笔记 - 5

3. lucene.net 高级应用之排序、设置权重、优化、分布式搜索

4. lucene 的简单实现 数据库索引 demo by Alan

5. beta技术沙龙:大型网站的Lucene应用

6. Lucene中文分词 “庖丁解牛”使用指南

7. Lucene应用-实现多重标准搜索

8. Lucene.Net Research

9. lucene学习3——词条字典[Term Dictionary]文件(.tis和.tii)与词条频率文件(.frq)、词条位置文件(.prx)

10. Lucene Payload 的研究与应用

11. Lucene多字段搜索

12. lucene缺点汇总

13. 一个实例包含lucene所有检索核心用法(多域检索、多索引检索)

14. Lucene 高亮显示搜索结果 C#代码

15. lucene 建立索引和简单搜索
本文标题:搜索引擎如何抓取网页-网站设计如何让搜索引擎更加友好
本文地址: http://www.61k.com/1067520.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1