一般来说,网站标题中的关键字越靠前的其权重越高,也越容易提升其排名能力。
搜索引擎会优先将关键字更明确、匹配程度更高的页面标题排在前面。用百度推广中的术语来说,匹配的权重顺序为:精确匹配>短语匹配>广泛匹配。
在网站标题中,最为重要的关键字一定要分割清楚,以便让百度进行到精确匹配,提高关键字的排名能力,而次要关键可以加入到短语匹配的行列中,并借助外链增强其排名能力。
在百度搜索结果页中,标题的最大显示长度为30个汉字,标题一旦超过长度会被截断,超出部分将以省略号省去,所以一方面为了最大程度的突出关键字,另一方面保证良好的用户体验,对此,我们也对百度搜索结果标题长度做了深入研究,在此我就借助马海祥博客的平台跟大家分享一下:
一、标题长度
一般来说,网页标题最好是7个汉字以上,不要超过30个汉字,对于搜索引擎来说,标题中越靠前的内容越重要,靠后的内容比较次要,所以要把最重要的关键字,尽量放在前面位置,用一句简短的话来概括网页内容,不要用列举的形式,一个词一个词的隔开(具体可查看马海祥博客《如何利用SEO技术设置文章网页标题》的相关介绍)。
1、PC端
目前常见的搜索引擎百度和谷歌,PC端显示的标题一般是60个字符,也就是30个汉字,如果你的网页标题超过30个字,那后面的就会截断,用省略号“…”代替。
(1)、百度标题长度30个汉字的猜测
在2014年6月,曾出过4道SEO相关面试题,如何从实际工作中来查看一个人的SEO能力,回答过第3题的2个人都选择了错误的答案B,原题如下:
百度标题长度通常限制在64个字节以内,请问标题长度小等于多少个汉字(一个汉字 = 2 字节)能完整显示标题,末尾不会以省略符号 "…"(占 3 字节)结束?
A、29 个;
B、30 个;
C、31 个;
D、32 个;
在登录百度帐号状态下,访问百度数据开放平台添加pc端新资源,可以看到提示:(为)方便您管理资源,请尽量填写有意义的中文标题,不超过30个(汉)字。
不超过30个汉字是迄今为止SEO行业主流的观点,亦是2位回答者不约而同都选答案B的原因。
但过了3个月找到正确答案却是C(31个汉字),更确切点是31.5个汉字。
2014年10月在百度站长平台看到一篇文章,建议标题字数控制在65个字节内,对于搜索引擎来说,标题过长意味着“超标”,只会保留前65个字节的内容。
对百度站长平台提到的保留前65个字节,大概是在封包里写好的标题结束的终止指令,所以HTML代码中能看不出来,这样算来63字节上限就合情合理了。
65字节来源之一是微软开发者网络 WEB1047 - <title> 标记内容太长
<title> 标记是网站开发人员控制的最重要标记,该标记可能会影响相关性和网站在搜索引擎结果中的排名。
搜索引擎只会分析 <title> 标记的前 65 个字符(不包括空格)。在确定网页相关性时,搜索引擎将不会考虑前 65 个字符后面的任何关键字。
出现在 <title> 标记内容中靠前位置的词条在搜索引擎结果页中更为显眼,从而可提高您的网页的点击量。
COMSE新人培养练习题(2013新版) 提到:
广告库文件格式(共 9 列,以 tab 分隔):winfoid term bid q title desc1 desc2 targeturl showurl 其中 winfoid 为 uint64_t,term 长度 < 16 byte,0 <= bid <= 1000,0 <= q <= 1000000,title 长度 < 64 byte,desc1/desc2 长度 < 128byte,targeturl 长度 < 256 byte,showurl 长度 < 64byte
所以,最长65个标签(包括空格)。
标题标签中65个字符之后的内容可能被搜索引擎给予比较低的权重,至少在搜索结果页面中显示的标题标签在第65个字符处就截断了,不过需要仔细观察这个数字,Google现在有时候支持到70个字符。
(2)、为何不是64字节?
下面阐述百度网页搜索结果标题字节截断上限为何不是 64 字节或 30 个汉字。
标题字节截断上限理论上是64字节,让我们来抽样检验下是否符合期望值。
案例1:
老A演讲实录 - 不可错过的淘宝运营策略 - 看世界 鬼脚七自媒体第四季 64 字节 //网页
老A演讲实录 - 不可错过的淘宝运营策略 - 看世界 鬼脚七自媒体第... 63 字节 //serp
谁能百里挑一张戴维牵手成功_谁能百里挑一张戴维 - 百度搜索结果参数 64 字节 //网页
谁能百里挑一张戴维牵手成功_谁能百里挑一张戴维 - 百度搜索结果... 63 字节 //serp
聪明的一休之反斗公主下载_聪明的一休之反斗公主 - 百度搜索结果参数 64 字节 //网页
聪明的一休之反斗公主下载_聪明的一休之反斗公主 - 百度搜索结果... 63 字节 //serp
但是我不能忍不能忍是什么歌_但是我不能忍不能忍 - 百度搜索结果参数 64 字节 //网页
但是我不能忍不能忍是什么歌_但是我不能忍不能忍 - 百度搜索结果... 63 字节 //serp
案例2:
123456789012345678901234567890123456789012345678901234567890123
能完整显示 63 字节 //serp
1234567890123456789012345678901234567890123456789012345678901...
省略符号 "…" 在第 62 个数字前截断,(61+3) 字节 //serp
随机抽取的4个64字节标题都出现省略符号 "…",63 字节更符合实际。
超过63字节百度通过分词技术减少到相应字节数,范围在 ([58,61]+3) 字节内。
可能百度先用分词技术,分成多个单词放在数组里,并行计算每个词的字节,这样改·字数统计函数性能相对一次性计算所有文字长度快得多。事后将各数组合起来的长度,再加上其他规则,小于64字节的部分作为展现标题。
即:如果标题长度是32个汉字,会减少1-3个汉字用省略符号"…"取代。
英文是山寨谷歌的截断法,减少最后1个单词,按标题最后1个单词长度决定,通常会比中文减少更多字节。
中西文符号混杂情况,减少字节范围位于上述两者间。
与标题长度1-64字节范围的常识不同,从1数到10都知道是10个,而4-13会错认为只有9个,据减法,(4 - 1) = (13 - 10),距离相等,亦是10个。
百度搜索开放平台现有展示模板的xml格式样例及规范的一条注释给出了更为精确的字节数。
资源名称,即展示在百度搜索结果页中的标题,长度限制为4-63字节。
触发截断上限63字节,0也算1字节,0-63亦有64个字节。
至于为何0也算一个字节,因为触发标题字节数下限是小于3字节,有些网页冇标题标签(title tag)或标题容器内为空等,这几种可能被百度默认为0字节。
将个人网站首页标题改为2字节的we,没有展现完整标题亦无截断,而是触发了F2 = xxxxxx68网址的较低优先级标题策略。
wei 3 字节 //serp
再改为3字节的wei,展现完整标题,标题恢复为F2 = xxxxxx6B网页标题。
msdn 的内容不在搜索引擎预期要查找的位置提及:
如果 <title> 标记包含少于五个字符,则搜索引擎可能会认为其比较长标题的相关性低。
如果 <title> 标记不包含文本,则搜索引擎可能会认为其根本没有相关性。
另外,还有超过63字节的特殊案例:
百度高级搜索指令filetype: 可以检索pdf, xls, ppt, doc, txt, wps, vsd, rtf, lrc, docx, pptx 等非网页格式文件,有前缀标题提示,不计入标题长度(更多高级搜索指令,可查看马海祥博客《详解搜索引擎的高级搜索语法指令》的相关介绍)。
【LRC】2014 CCTV “Star of Outlook” English Talent Competition 2014... //serp
docx 格式不被计算入搜索结果标题长度内,兼有早期模版bug,搜索结果标题实际上限是(7+61+3) 字节。
分析 bug 可能原因:
案例:
【LRC】如何使用css让div居中对齐_百度文库 【网页搜索】本地搜索模块
如何使用css让div居中对齐_百度文库 【网页搜索】结果页模版
百度本地搜索结果中出现【LRC】前缀,标准结果页却显示Word图标,可能是早期模版没有被PK掉所致。
(3)、百度数据开放平台标题长度限制和截断条件注释
《百度搜索开放平台现有展示模板的xml格式样例及规范》里另一条注释:
资源所在页面的链接地址,用于显示在搜索结果的下方。不需要有 "http://" 的部分;Showurl 的长度限制为 2-42 字节,如果超过 42 字节,请截断,并增加省略符号 "…",并保证截断后的 showurl 加上省略符号总长度不超过 42 字节。
百度没有直接提及网页搜索结果展现标题截断字节数的上下限,所以我将《样例及规范》的两处注释结合如下:
使用主流的中文环境操作系统,浏览器等(字符编码为 UTF-8, GB2312, BIG5 等),展示在百度中文搜索结果页(字符编码为 UTF-8, GB2312, BIG5 等)的网页型标题,长度限制为 3-63 字节(2 byte < title 长度 < 64 byte),如果 F 参数所指的标题策略是 F2 = xxxxxx6B,短于 3 字节或超过 63 字节的非百度产品的普通结果(AS)会自动截断,并增加省略符号 "…",截断后加上省略符号的 title 长度限制为 3-64 字节。
百度设置一个不符合现实常见的标题长度,可能是技术导向公司单纯地想不到标题长度亦是用户体验一部分,只是从计算机本身二进制的规则角度考虑,最长 64 字节,抓取过来标题长度超出 63 的多了去了,不显示浪费资源。机械的把 8 的平方作为标题长度。一直到了智能手机上,百度算是改变了愚昧做法,把字节数改成 3 - 52 字节。
(4)、截断与分词技术 | 超出标题字节上限的失控
关于分词技术,我曾在马海祥博客《百度中文分词技术是什么》一文中,跟大家做过详细的介绍了,一般来说,分词是在截断前执行,案例:
林依晨宣布订婚(图)_网易新闻中心 //serp
百度搜索“林依晨订婚”,“林依晨和订婚”是分开飘红的,可以推测百度事先已经分过词,飘红后再计算分开的每个词汇字数是否超出了64字节。
案例:
小学作文_小学作文大全_小学作文题目_素材_百度文库作文库_百度文库 //网页
网上没有找到百度网页搜索分词的源代码,用百度音乐前端的 Chinese Segment (基础语料分词示例)勉强代替。
分词结果:
小学 作文 _ 小学 作文 大全 _ 小学 作文 题目 _ 素材 _ 百度 文库 作 文库 _ 百度 文库
小学作文_小学作文大全_小学作文题目_素材_百度文库作..._百度文库 //serp
分词后的截断并非机械地按照超过63字节上限加省略符号,而是计算到第50个字节作,虽然后面还有内容,但省略符号占3字节,_百度文库占9字节,若再加一个汉字,(50+3+9+2) = 64 就超出63字节上限,便去掉文库,在第50个字节作这儿截断。
//拼接title
$data['offsetInfo']['title'] = "\2".$queryInfo['wordNoSyntax']."\3_百度文库";
百度文库的标题长度,末尾的“_百度文库”是占用9字节的标题,所以文库的标题长度只要超过54字节就会出现省略号...。
百度搜索结果展现的最短标题测试:
搜索发现由于百度对韩文|朝鲜语支持有限,出现bug,加上展现的标题会自动过滤掉百度数据库里标题的空格,所以在4字节的情况下,却只展现1个逗号,不知还有无不能点击的空标题,否则1字节已经是百度可见最短标题了。
(5)、标题前出现图标或提示词
关于网站图标的问题,马海祥以下面这个案例跟大家分析一下:
不受分词技术影响的截断测试:
机械联盟网-品牌导购-设备租赁-二手设备-配件-招聘求职-用机养... //serp
机械联盟网-品牌导购-设备租赁-二手设备-配件-招聘求职-用机养机-... //serp
3字节的 机- 被 favorites icon(网站图标) 挤掉,而末尾的省略符号 "…" 不变。可能类似 CSS 里 text-overflow: ellipsis,使末尾处变成省略号。
从上面看到很难事先控制超出63字节百度会在哪里截断标题,因而建议pc端普通标题长度不超过63字节,展现网站图标的标题长度不超过(64-3)=61字节。
(6)、标题后缀为百度自家产品品牌
案例:
营销人员如何通过在线营销转变他们的业务Forrester.How..._百度文库 //serp
后缀“_百度文库”占去9字节,可控标题长度为63 - 9 = 54字节。
常见百度产品实际可控标题字节上限(长期更新)
_百度百科 54 字节
_百度知道 54 字节
_百度贴吧 54 字节
_百度文库 54 字节
_百度经验 54 字节
(7)、特殊F参数影响标题长度调查
百度F2参数的第7,8位含义是搜索结果前后标题策略,与普通的F2 = xxxxxx6B网页标题是否会有所不同,限于篇幅,只用百度搜索结果7种标题样式较长的一种F2 = xxxxxxEB链接锚文本(-)网页标题测试。
马海祥 - 百度权威数据报告指出低质站泛滥,优质站将受益 - 网络...
(6+3+50+3) 字节 //serp
开头的马海祥是许多网页上加了以作者名字的链接锚文本,( - )是百度连接前后标题策略自动添加的,之后显示网页标题中的前50个字节,最后标题超出63字节,以3字节省略号截断。
结论是截断策略是在F参数所指的标题策略后执行,发现搜索结果标题不同于原先设想后,可以查看F2第7,8位,再做相应调整。
譬如搜索个人网站域名,百度赐予的奇葩标题,您可能想看我的,查看HTML源码 F2 = xxxxxx6E 权值标签,而真实H1标签是:<h1>您可能想看我的<a href="http://www.mahaixiang.cn">马海祥博客</a>。</h1>
H1标签嵌套锚文本标签内容及结尾的句号被百度过滤掉,执行标题策略,仅剩下暧昧的“您可能想看我的”:<h1><a href="http://www.mahaixiang.cn/">您可能想看我的马海祥博客</a>。</h1>
事后重构H1标签嵌套结构,完整展现H1容器内的文本。
(8)、分析百度标题规则优先级
关于百度标题各个规则优先级的梳理,以PC端为例:
①、服务器
a、百度蜘蛛判断网页编码字符集。
b、抓取网页标题,部分繁简转换。
c、部分全角标点符号转换半角标点符号。
d、阿拉丁结果(sp)、最新相关信息(中间页)等优先级高于过滤重复标点符号。
e、把连续重复超过3次的部分标点符号替换为3次。
②、客户端
a、选择何种编码的百度搜索(UTF-8, GB2312, Big5, etc.)
b、搜索框输入查询字符串
c、“百度一下”替换不同编码,并将部分全角符号替换为半角符号及安全过滤。
d、HTML 实体转换
e、是否开启不纠错策略 f=12&nojc=0(开),f=13&nojc=1(闭)
③、服务器
a、编码转换
b、F2-78 参数所指策略
c、标题前后缀
d、分词技术
e、匹配飘红
f、计算可展现字数
g、各种截断
④、客户端
a、展现在用户眼前的可见标题(3-64字节)
b、点击标题
⑤、服务器
用户点击过的标题以4-65字节长度存入数据库。
2、平板电脑
百度Pad版研究不多,新买了一块iPad mini 2测试Pad版搜索结果标题长度,大致和PC端规则一致。
3、智能手机
关于百度移动搜索标题字数上限,我们先看一个案例:
SEO马海祥-SEO教程,SEO方法,SEO技术,网站优化,网络推广! 52 字节 //serp
马海祥SEO博客-最权威的SEO技术研究和网站优化学习平台.. (51+2) 字节 //serp
11人足球网 - 天下足球|PES2015|FM2015|FIFA15|足球.... (48+4) 字节 //serp
目前智能手机的两大主流操作系统:安卓和iOS,先拿三星手机浏览器Android 4.2测试了下,将标题复制 + 粘贴到字数统计性能比较工具里计算,不触发截断上限是52字节。
又上京东分24期买了个iPhone4s Safari浏览器iOS 7.1.2测试,PC端访问m.baidu.com,有前缀当前页排名 + 后缀2点省略号,到了iPhone上,无前缀当前页排名,但后缀可能有4点省略号,长度范围在 (50+2+[2,3]) 个字节,其它规则与PC, iPad端类似。
123456789012345678901234567890123456789012345678901234567890123_斗破苍穹吧_百度贴吧 83 字节 //网页
搜索结果只显示 3 字节省略符号 ...。
展现下限亦是3个省略号,最少标题是3字节,与PC, Pad版相同,不再赘述,建议移动端标题范围是3-52字节。
二、标题长度的其它发现
在对标题长度做了常规测试以后,除了以上的结果,我们还有以下几点新的发现,在此也在马海祥博客上跟大家分享一下:
1、PC端
首先,我们先来看一下PC端的新发现,具体来说,有以下几点:
(1)、省略符号不止出现于标题末尾
案例:
...123456789012345678901234567890123456789012345678901234567890 //serp
第1种情况是省略符号 "…" 作为前缀。
...batang开头的字库文件,这个文件大小为15.5 MB 和 C:..._百度知道 //serp
第2,3种情况是省略符号作为前后缀出现,并且末尾还有“_百度知道”,实际标题只显示了48字节。
(2)、百度按照标题宽度折行
.t{font-weight:normal;font-size:medium;margin-bottom:1px}
标题字体大小是默认的中等,而常见的16px, 540 / 16 = 33.75,一行最多展示33个汉字,大于64字节。
百度是按标题总的宽度截断,而非字数,只需查看CSS便可证明。
#content_left {
width:540px;
padding-left:138px;
padding-top:5px;
}
搜索结果宽度
#rs table {
width:540px;
}
有趣的是相关搜索宽度和搜索结果宽度保持一致。
案例:
是否折行的测量标准按您的浏览器字体字号而不同。
当chrome浏览器配置是一个阿拉伯数字宽度为9 px,SERP显示是540px,只能放60个9px的宽度,不可避免出现两行标题。
(3)、百度搜索结果标题HTML实体转换现象
虽然可见标题长度是(61+3)字节,但HTML实体转换为字符前,源代码的搜索结果标题长度可以不止(61+3)字节。
案例:
Don't use ABCDEFGHIJKLMNOPQRSTUVWXYZ `1234567890-=~!@#$%^&*()... //serp
您所看到的实质是浏览器经过一次HTML实体转换的标题,在浏览器中查看HTML源代码
Don't use ABCDEFGHIJKLMNOPQRSTUVWXYZ `1234567890-=~!@#$%^&*()...
(4)、PC端访问手机端百度的标题长度上限
马海祥SEO博客-最权威的SEO技术研究和网站优化学习博客 53 字节 //网页
马海祥SEO博客-最权威的SEO技术研究和网站优化学习博客 52 字节 //网页
马海祥SEO博客标题比较特殊,标题末尾有空格,PC端是2个空格,展现时候没有空格,HTML源码则保留1个空格,而移动端是1个空格,被算作搜索结果标题的一部分。
另外,PC端访问m.baidu.com如下:
10 马海祥SEO博客-最权威的SEO技术研究和网站优化学习博客.. (3+51+2) 字节 //serp
1 马海祥SEO博客-最权威的SEO技术研究和网站优化学习博客.. (2+51+2) 字节 //serp
位置前缀似乎不被计入标题长度,10 和 1 是一样的。如果去掉位置前缀,但保留空格,标题长度是 53 字节,网页标题末尾的 1 个空格反被 2 点省略号替换。不过智能手机上没有截断。
SEO马海祥-SEO教程,SEO方法,SEO技术,网站优化,网络推广!53 字节 //网页
SEO马海祥-SEO教程,SEO方法,SEO技术,网站优化,网络推广! 52 字节 //网页
PC端访问m.baidu.com,搜索“SEO马海祥-SEO教程,SEO方法,SEO技术,网站优化,网络推广!”,显示完整标题,而搜索“SEO马海祥-SEO教程,SEO方法,SEO技术,网站优化,网络推广”,最后一个感叹号被2点省略符号替换。目标网页标题最后是全角感叹号(2 字节),而百度展现的是半角感叹号(1 字节),但智能手机端无此现象。
PC端访问m.baidu.com标题截断算法不同于真正智能手机访问m.baidu.com的算法。若要在PC端访问m.baidu.com都不出现省略符号,建议在使用1个感叹号、逗号等全角符号的情况下,字节小等于52字节。
最后分析下网页标题中的全角标点符号具体分为5种情况。
①、转换为半角(可能包含于繁简转换词库),过滤重复。
②、不转换为半角,过滤重复。
③、不转换为半角,不过滤重复,与半角标点符号是同义词。
④、pc端访问m.baidu.com,搜索词包含可转换半角标点符号,转换为半角,过滤重复。
⑤、pc端访问m.baidu.com,搜索词不包含可转换半角标点符号,不转换为半角,过滤重复
(5)、过滤反复出现的标题符号
急急急急急急急,难难难难难****** HELP ME!!!!! -CSDN论坛-CSDN.SEO-... 68 字节 //网页
急急急急急急急,难难难难难*** HELP ME!!! -CSDN论坛-CSDN.SEO-... 62 字节 //serp
百度将“******”和“!!!!!”分别过滤为“***”和“!!!”。
【图】【【【【【【【【世嘉日常保养之材料选择】】】】】】】】_世嘉论坛_汽车之家论坛 82 字节 //网页
【图】【【【世嘉日常保养之材料选择】】】_世嘉论坛_汽车之家论坛 62 字节 //serp
连续并且重复3次以上的鱼尾号“【”替换为“【【【”,而1个不连续的鱼尾号“【”不受影响。
(6)、全角标点符号转换为半角
下面这些全角标点符号在普通搜索结果(as)会被替换为半角,在百度搜索框内输入下列标点符号即可看到替换现象。
| ==> | 竖线
, ==> , 逗号
; ==> ; 分号
: ==> : 冒号
? ==> ? 问号
! ==> ! 叹号
- ==> - 连接号
( ==> ( 左圆括号
) ==> ) 右圆括号
{ ==> { 左花括号
} ==> } 右花括号
‘ ==> ' 左单弯引号
’ ==> ' 右单弯引号
2、智能手机
接下来,我们再来看一下智能手机端的新发现,具体来说,有以下几点:
(1)、标题折行
百度移动搜索优化指南2.0提到:
①、用户在百度移动搜索中输入query搜索到你的页面时,title作为最重要的内容展现在搜索结果中,主题明确、吸引眼球的title能够使用户第一时间理解你页面的主题是否符合他的需求,进而更快捷地从众多搜索结果中选择你点击你。
②、主题明确;
③、简洁扼要,不罗列,尽量不超过17个中文汉字,否则会折行;
④、如果你的品牌知名度高,品牌词最好能够展现出来;
⑤、吸引眼球。
17个汉字似乎是iPhone4s竖屏只有320宽度展现的上限附近,原理与百度按照标题宽度折行类似。
(2)、百度搜索结果标题HTML实体转换现象
%27 是用 URL 编码形式表示的 ASCII 字符(十六进制格式),十六进制格式用于在浏览器和插件中显示非标准的字母和字符。
【百度对关于url中带#被收录的问题反馈】里澄清道:
关于 url 中带 # 被收录,之前跟站长平台的刘老师反馈过了,她让百度工程师看了一下,特说明如下:
①、百度是根据转码后的 url 进行抓取的,之前大家发现搜索结果中出现 # 的 url 的 case,一般是原 url 把 # 转码成了 %23(url 编码转码的知识大家网上搜就知道了);如http://www.mahaixiang.cn/s/%23%E6%98%A5%E6%99%9A%E7%AB%A5%E6%98%9F%E9%82%93%E5%91%9C%E8%B4%BA%E6%82%A3%E7%99%BD%E8%A1%80%E7%97%85/ (这个 url 中的 s/%23 实际上是转码后的 s/#)
②、当百度抓取转码后的 url,在搜索结果中又把 %23 解码成 #,因此大家看到了搜索结果中出现 # 的url。
三、中英文混合字数统计代码比较
“工欲善其事,必先利其器”,分析百度搜索结果标题长度前,先要找到适宜的字数统计工具,只是为了您的阅读体验,放到后面才介绍。
1、字节
字节(B)是 Byte 的中文,多用作存储容量单位,亦可作为传输容量单位。英文维基百科解释:
The byte /?ba?t/ is a unit of digital information in computing and telecommunications that most commonly consists of eight bits.【字节(读音: 百特)是计算与通信中一种数字信息单位,1 字节代表 8 比特最常见。】
1 字节(Byte) = 1 个英文字符(UTF-8 编码) = 8 比特(bit) = 8 位二进制数字
2、百度计算中文长度验证
汉语字符不同于英语字符,有3种常见长度,分别是2,3,4字节。
案例:
百度搜索结果URL参数解析疑问 - 搜外问答
<?php echo strlen('百度搜索结果URL参数解析疑问 - 搜外问答');?>
中文 16 个字符
非中文 6 字节
PHP strlen() 函数
华文 = (54 - 6) / 16 = 3 字节
改·字数统计函数
华文 = (38 - 6) / 16 = 2 字节
接下来,我们在来看看百度计算朝鲜语长度验证:
韩国延世大学医院(?????? ??)-综合医院-韩国馆-帮5买
韩国延世大学医院(?????? ??)-综合医院-...
非韩文长度为 32 字节,???????? 根据上述截断规则,8 个韩文是 4 × 8 = 32 字节。
照着朝鲜语一路推下去,各种转码字节数很难用改·字数统计函数兼容,实际上百度仅对几种转码较为支持,将中文转为小语种导致的乱码字节数通常大于字数统计函数64字节上限。下面亦提到用户电脑上没有安装适合的字体也无法正常显示和正常统计字节。
XML及其子集XHTML采用UTF-8作为标准字集,理论上我们可以在各种支持XML标准的浏览器上显示任何地区文字的网页,只要电脑本身安装有合适的字体即可。可以利用 &#nnn; 的格式显示特定的字符。nnn 代表该字符的十进制Unicode代码。如果采用十六进制代码,在编码之前加上 x 字符即可,但部分旧版本的浏览器可能无法识别十六进制代码。
中日韩统一表意文字:
但是另一方面,也有批评认为 Unicode 收入大量错讹字及写法高度相似的同一字的不同字形本身就是不应该的。电脑文本本身永远不可能完全无损地记录文献,且文献本身也会因传抄制版等原因略有不同,如果把每个字的各种写法全部编码,不仅浪费空间,而且检索困难,写法稍有不同就无法检出,以至于检索字词时必须反复检索其不同写法,造成重复劳动,对文献研究反而是种妨碍,例如 Unicode 中将避讳的缺笔字也进行编码,在检索文献时,这些字无法检索出,反造成困扰。完全无损地研究、记录文献只能通过查看原本或照相复印版来完成,把无损保存转嫁给编码是错误的。
通过百度搜索的实际情况,结合维基百科对 Unicode 的简介,很可能是采用一一对应的方式简单地把 UTF-8, GBK, BIG5, etc. 编码的繁体字词自动转换为简体字词以提升检索速度。
引用后来随着我们不断的执着的去强调必须一秒内出结果,必须99.9甚至99.99%,而省略了十进制或十六进制Unicode代码,导致出现了百度搜索繁体字,却很少在SERP看到繁体字的现象。反之无法或很难检索到十进制或十六进制Unicode代码的华文。非要完美在百度搜索结果展现繁体字,并被搜索到,通过编码是不合情理的,更好的建议是在缩略图里展示异体字。
百度查询词过滤机制(filter):检索词带有 http:// 会被自动过滤掉,其他一些会造成恶意攻击的字符亦会被过滤。
3、百度字数统计函数与计算搜索结果标题是否为同一函数
案例:
Рослинництво, тваринництвотавет...
百度改·字数统计函数 63 字节
正则表达式 45 字节
PHP strlen + mb_strlen 函数 48.5 字节
截图中上方标题约为下方标题长度一半,都触发截断,只有改·字数统计函数的计算结果与前述标题字节上限结论一致。
其他2种字数统计能解释标题长度为何较短,但与触发标题字节上限误差较大。
4、速度测试
★★☆☆☆ 2 星 改·字数统计函数采用 for 循环遍历每个字符,速度较慢,适合少量计算。
★★★☆☆ 3 星 正则表达式处理较短单一字符集有优势。
★★★★★ 5 星 PHP strlen + mb_strlen 函数的优点是无论多少字数,速度快捷稳定。
5、兼容性测试
案例:
···(3 个间隔号)
改·字数统计函数 6 字节
正则表达式 4 字节
PHP strlen + mb_strlen 函数 4.5 字节
вул?ца(白俄罗斯)
改·字数统计函数 12 字节
正则表达式 8 字节
PHP strlen + mb_strlen 函数 9 字节
★★★★★ 5 星 论文主要用解释百度标题计数,改·字数统计函数兼容性自是最好。
★★★☆☆ 3 星 正则表达式缺陷在于小范围的字符集内有效,超出中英文字符等集合便失效了。
★★★☆☆ 3 星 当然 PHP 自带函数兼容性比正则表达式好不到哪里。
6、速度与兼容性最优化方案
最少限制与应用范围考虑,百度搜索结果基本属于中英文符号混杂64字节以内标题为主,使用百度的改·字数统计函数最合适。
7、字数统计工具结果比较
案例:拿乌克兰语网站测试各个字数统计工具算法差异:
Рослинництво, тваринництво та ветеринар?я, техн?чне забезпечення :: Аграрний сектор Укра?ни 动植物与兽医学,技术支持: 乌克兰农村经济
微软 word2010 10 字数
站长工具 66 字符
爱站网 91 字符
正则表达式 123 字节
PHP strlen + mb_strlen 函数 130 字节
搜外 163 字节
排版助手 166 字节
有一个网站 169 字节
百度改·字数统计函数 169 字节
站长工具、爱站网、工具猫、xpcha、正则表达式、PHP函数等字数统计结果与百度计算方式相去较远。
搜外seo综合诊断较为接近百度字数统计结果,缺点是运行耗时长及受限于只能查询指定域名,使用范围不大。
排版助手作为网络编辑常用的工具,很接近百度计算方式,很实用,不过仍有误差。
有一个网站在线字数统计与百度改·字数统计函数计算结果一致,不过在间隔号、回车等符号计算方法与之不同。
8、PHP源码
百度改·字数统计函数
<?php
$str = stripslashes(htmlspecialchars_decode($words, ENT_QUOTES));
function smarty_modifier_wordcount($str,$encoding = 'UTF-8')
{
if(strtolower($encoding) == 'gbk') {
$encoding = 'gb18030';
}
if(!is_string($str)||$str === '') return false;
$mbLen = iconv_strlen($str, $encoding);
$subLen = 0;
for ($i = 0; $i < $mbLen; $i++) {
$mbChr = iconv_substr($str, $i, 1, $encoding);
if (1 == strlen($mbChr)) {
$subLen += 1;
} else {
$subLen += 2;
}
}
return $subLen;
}
echo smarty_modifier_wordcount($str);
?>
正则表达式:
<?php
$str = stripslashes(htmlspecialchars_decode($words, ENT_QUOTES));
$number += strlen(preg_replace('/[\x80-\xff]{1,3}/', ' ', $str, -1, $number));
echo $number;
?>
PHP strlen + mb_strlen 函数
<?php
$str = stripslashes(htmlspecialchars_decode($words, ENT_QUOTES));
echo ((strlen($str) + mb_strlen($str, 'UTF8')) / 2);
?>
附录:
以下是本文中的一些名词解释:
htmlspecialchars_decode()
函数会把一些预定义的 HTML 实体转换为字符。
? ENT_QUOTES - 解码双引号和单引号
预定义的字符有:
& 成为 & 和号
" 成为 " 双引号
' 成为 ' 单引号
< 成为 < 小于
> 成为 > 大于
F2参数第7,8位
破解出的F2参数第7,8位,百度搜索结果标题大致分为以下几种形式:
F2 = xxxxxx68 网址 url
F2 = xx2xxx6A 标语 slogan
F2 = xxxxxx6B 网页标题 title
F2 = xxxxxx6E 大字标题 headline
F2 = xxxxxx6F 大字标题 - 网页标题 headline - title
F2 = xxxxxxEA 锚文本 anchortext
F2 = xxxxxxEB 锚文本 - 网页标题 anchortext - title
filetype:
文件类型限定搜索: 搜索结果限制为特定的文件扩展名结尾的网页
百度支持的扩展名和类型:
filetype:pdf PDF Adobe Acrobat
filetype:xls Microsoft Excel
filetype:ppt Microsoft Powerpoint
filetype:doc Microsoft Word
filetype:txt
filetype:wps
filetype:vsd
filetype:rtf // srcid = 1525 [10] ,全部是百度文库
filetype:all // 其中的"all"表示搜索百度所有支持的文件类型 [11]
filetype:lrc // bug
filetype:docx // 得到的前缀是 【LRC】,这个 bug 最晚在 2012年01月出现
filetype:pptx // 得到的前缀是 【LRC】,这个 bug 最晚在 2012年01月出现
SERP
search engine results page 搜索引擎返回查询结果列表页的英文缩写。
省略符号 "…"
用于截断表示搜索结果标题超出限制的部分,pc 与 Pad 版省略符号是 3 字节,智能手机移动端省略符号为 2-4 字节。
UTF-8
一种针对 Unicode 的可变长度字符编码(定长码),可以有 1-3 字节不同长度。
本文为马海祥博客原创文章,如想转载,请联系原作者。
评论