字数统计工具

周杰

百度搜索结果标题长度研究

弁言

第1章 标题长度
 1.1 pc 端   1.1.1 百度标题长度 30 个汉字的可能起源   1.1.2 为何不是 64 字节   1.1.3 百度数据开放平台标题长度限制和截断条件注释   1.1.4 截断与分词技术   1.1.5 标题前缀是图标或提示词    1.1.5.1 网站图标    1.1.5.2 特定扩展名文件的提示前缀不计入标题字数   1.1.6 标题后缀为百度自家产品品牌   1.1.7 特殊 F 参数标题长度调查   1.1.8 分析百度标题规则优先级
 1.2 平板电脑
 1.3 智能手机   1.3.1 百度移动搜索标题字数上限   1.3.2 截断与分词技术

第2章 其它发现
 2.1 pc 端   2.1.1 省略符号不止出现于标题末尾   2.1.2 百度按照标题宽度折行   2.1.3 百度搜索结果标题 HTML 实体转换现象   2.1.4 pc 端访问 m.baidu.com 标题长度上限
 2.2 平板电脑   2.2.1 百度搜索结果标题 HTML 实体转换现象
 2.3 智能手机   2.3.1 标题折行   2.3.2 百度搜索结果标题 HTML 实体转换现象

第3章 中英文混合字数统计代码比较
 3.1 字节
 3.2 百度计算中文长度验证
 3.3 百度字数统计函数与计算搜索结果标题是否为同一函数
 3.4 速度测试
 3.5 兼容性测试
 3.6 速度与兼容性最优化方案
 3.7 其他字数统计工具
 3.8 PHP 源码

附录
 名词解释
 参考资料

弁言

《百度搜索结果标题长度研究》大致思路于2014年09月成型,事后花了一个月去弥补文章显而易见的裂痕,1000 字能叙说清楚的事被充到 7000 字,索性写成论文形式。


第1章 标题长度


1.1 pc 端


1.1.1 百度标题长度 30 个汉字的可能起源

在2014年06月14日,曾出过 4 道 seo 相关面试题,如何从实际工作中来查看一个人的SEO能力 [1] ,回答过第 3 题的 2 个人都选择了错误的答案 B。 原题如下

百度标题长度通常限制在 64 个字节以内,请问标题长度小等于多少个汉字(一个汉字 = 2 字节)能完整显示标题,末尾不会以省略符号 "…"(占 3 字节)结束?
A. 29 个;
B. 30 个;
C. 31 个;
D. 32 个;

在登录百度帐号状态下,访问百度数据开放平台 添加 pc 端新资源 [2] ,可以看到如下提示

(为)方便您管理资源,请尽量填写有意义的中文标题,不超过 30 个(汉)字。

不超过 30 个汉字是迄今为止 seo 行业主流的观点,亦是 2 位回答者不约而同都选答案 B 的原因。
但过了 3 个月找到正确答案却是 C. 31 个汉字,更确切点是 31.5 个汉字。
2014年10月23日在百度站长平台看到的文章《产品、编辑必看:撰写搜索引擎喜爱的标题

标题字数控制在 65 个字节内
对于搜索引擎来说,标题过长意味着“超标”,只会保留前 65 个字节的内容。

对百度站长平台提到的保留前 65 个字节,大概是在封包里写好的标题结束的终止指令,所以 HTML 代码中能看不出来。这样算来 63 字节上限就合情合理了。 (之后因为我的缘故,这篇文章的字节数被修改为 60 字节,可以通过最早的一些转载网站(譬如卢松松博客的《编辑必看:撰写搜索引擎喜爱的标题-卢松松博客》)了解原文。)

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

《SEO实战密码:60天网站流量提高20倍》作者 Zac 昝辉 的错误观点如下

从纯技术角度说 Title 标签可以写任意长度的文字,但搜索结果列表页面标题部分能显示的字数有一定限制。百度最多显示 30 个中文字符,Google 显示 65 个英文字符,转成中文大概是 32 个字符。Title 标签中超过这个字数限制的部分将无法显示,通常在搜索列表结尾处以省略号代替。
前面介绍过,用户搜索的关键词会在显示的标题中被加红色高亮。如果搜索词位于 Title 标签后面超出显示字数部分,百度会显示 Title 中后面包含关键词那部分文字,前面加省略号。
所以标题标签不要超过 30 个中文字,为保险起见最好不要超过 25 个中文字。实际上为了提高用户体验及突出目标关键词,我通常建议标题标签以 15-20 个中文字比较适合。
标题标签之所以不宜超过搜索结果列表所能显示的字数限制,主要有三点原因:
(1)搜索结果列表标题不能完整显示时,结尾会被切断,而站长又不容易预见在什么地方被切断。
(2)虽然超过显示字数限制的标题标签并不会引来搜索引擎的惩罚,但超过显示字数的部分搜索引擎会降低权重,对排名作用很小。
(3)标题越长,在不堆积的前提下,无关文字必然越多,不利于突出关键词相关性。
昝辉. 第5章 页面优化//SEO实战密码:60天网站流量提高20倍(第2版). 博文视点 2014年1月第8次印刷. 北京: 电子工业. 2012.5: 第165-166页 ISBN 7-121-16767-6 (简体中文)

最长 65 个标签(包括空格) 标题标签中 65 个字符之后的内容可能被搜索引擎给予比较低的权重。至少,在搜索结果页面中显示的标题标签在第 65 个字符处就截断了。不过需要仔细观察这个数字,Google 现在有时候支持到 70 个字符。 Enge, Eric; Stephan Spencer; Rand Fishkin; Jessie C. Stricchiola. 第6章 开发一个SEO友好的网站//SEO艺术. 昝辉 译 2012年4月第1次印刷. 北京: 电子工业. 2012.4: 第201页. ISBN 7-121-16159-9 (简体中文)

下面阐述百度网页搜索结果标题字节截断上限为何不是 64 字节或 30 个汉字。

1.1.2 为何不是 64 字节

标题字节截断上限理论上是 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 格式样例及规范 [3] 的一条注释给出了更为精确的字节数。

资源名称,即展示在百度搜索结果页中的标题。长度限制为 4-63 字节

案例 4

豆瓣 4 字节 //serp

触发截断上限 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> 标记不包含文本,则搜索引擎可能会认为其根本没有相关性。

 1.1.5.2 超过 63 字节的特殊案例

百度高级搜索指令 filetype: 可以检索 pdf, xls, ppt, doc, txt, wps, vsd, rtf, lrc, docx, pptx 等非网页格式文件,有前缀标题提示,不计入标题长度。

案例 8

【LRC】2014 CCTV “Star of Outlook” English Talent Competition 2014... //serp

docx 格式不被计算入搜索结果标题长度内,兼有早期模版 bug [注],搜索结果标题实际上限是 (7+61+3) 字节。

1.1.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 字节。

1.1.4 截断与分词技术 | 超出标题字节上限的失控

分词是在截断前执行
案例
林依晨订婚

林依晨宣布订婚(图)_网易新闻中心 //serp

百度搜索 林依晨订婚林依晨订婚 是分开飘红的,可以推测百度事先已经分过词,飘红后再计算分开的每个词汇字数是否超出了 64 字节。

案例 5

小学作文_小学作文大全_小学作文题目_素材_百度文库作文库_百度文库 //网页

网上没有找到百度网页搜索分词的源代码,用百度音乐前端的 Chinese Segment (基础语料分词示例) [4] 勉强代替。

分词结果

小学 作文 _ 小学 作文 大全 _ 小学 作文 题目 _ 素材 _ 百度 文库 作 文库 _ 百度 文库
小学作文_小学作文大全_小学作文题目_素材_百度文库作..._百度文库 //serp

分词后的截断并非机械地按照超过 63 字节上限加省略符号,而是计算到第 50 个字节 ,虽然后面还有内容,但省略符号占 3 字节,_百度文库占 9 字节,若再加一个汉字,(50+3+9+2) = 64 就超出 63 字节上限,便去掉 文库,在第 50 个字节 这儿截断。

//拼接title $data['offsetInfo']['title'] = "\2".$queryInfo['wordNoSyntax']."\3_百度文库"; 百度文库的标题长度,末尾的 _百度文库 是占用9字节的标题 所以文库的标题长度只要超过 54 字节就会出现省略号...

百度搜索结果展现的最短标题
百度最短标题

부산의 대표 정론지, 국제신문

搜索 https://www.baidu.com/s?wd=www.kookje.co.kr,发现由于百度对韩文|朝鲜语支持有限,出现 bug,加上展现的标题会自动过滤掉百度数据库里标题的空格,所以在 4 字节,   的情况下,却只展现 1 个逗号,不知还有无不能点击的空标题,否则 1 字节已经是百度可见最短标题了。

1.1.5 标题前出现图标或提示词

 1.1.5.1 网站图标

案例 6
不受分词技术影响的截断
机械联盟网

机械联盟网-品牌导购-设备租赁-二手设备-配件-招聘求职-用机养... //serp
机械联盟网-品牌导购-设备租赁-二手设备-配件-招聘求职-用机养机-... //serp

3 字节的 机- 被 favorites icon(网站图标) 挤掉,而末尾的省略符号 "…" 不变。可能类似 CSS 里 text-overflow: ellipsis,使末尾处变成省略号。引用《CSS 网站布局实录》

从上面看到很难事先控制超出 63 字节百度会在哪里截断标题,因而建议 pc 端普通标题长度不超过 63 字节,展现网站图标的标题长度不超过 (64-3)=61 字节。

1.1.6 标题后缀为百度自家产品品牌

案例 9

营销人员如何通过在线营销转变他们的业务Forrester.How..._百度文库 //serp

后缀 _百度文库 占去 9 字节,可控标题长度为 63 - 9 = 54 字节。

常见百度产品实际可控标题字节上限(长期更新)
_百度百科 54 字节 _百度知道 54 字节 _百度贴吧 54 字节 _百度文库 54 字节 _百度经验 54 字节

1.1.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="https://www.weixingon.com/wechat/">微信</a>。</h1>

H1 标签嵌套锚文本标签内容及结尾的句号被百度过滤掉,执行标题策略,仅剩下暧昧的“您可能想看我的”。

<h1><a href="https://www.weixingon.com/wechat/">您可能想看我的微信</a>。</h1>

事后重构 H1 标签嵌套结构,完整展现 H1 容器内的文本。

1.1.8 分析百度标题规则优先级

关于百度标题各个规则优先级的梳理,以 pc 端为例。

服务器
1. 百度蜘蛛判断网页编码字符集 2. 抓取网页标题,部分繁简转换 3. 部分全角标点符号转换半角标点符号 4. 阿拉丁结果(sp)、最新相关信息(中间页)等优先级高于过滤重复标点符号 5. 把连续重复超过 3 次的部分标点符号替换为 3 次

客户端
1. 选择何种编码的百度搜索(UTF-8, GB2312, Big5, etc.) 2. 搜索框输入查询字符串 3. “百度一下”替换不同编码,并将部分全角符号替换为半角符号及安全过滤 4. HTML 实体转换 5. 是否开启不纠错策略 f=12&nojc=0(开),f=13&nojc=1(闭)

服务器
1. 编码转换 2. F2-78 参数所指策略 3. 标题前后缀 4. 分词技术 5. 匹配飘红 6. 计算可展现字数 7. 各种截断

客户端
1. 展现在用户眼前的可见标题(3-64 字节) 2. 点击标题

服务器
1. 用户点击过的标题以 4-65 字节长度存入数据库

1.2 平板电脑

Pad 版

百度 Pad 版研究不多,新买了一块 iPad mini 2 测试 Pad 版搜索结果标题长度,大致和 pc 端规则一致。

1.3 智能手机

1.3.1 百度移动搜索标题字数上限

案例 14

SEO那些事-SEO教程,SEO方法,SEO技术,网站优化,网络推广! 52 字节 //serp
SEO研究协会网-最权威的SEO技术研究和网站优化学习平台.. (51+2) 字节 //serp
11人足球网 - 天下足球|PES2015|FM2015|FIFA15|足球.... (48+4) 字节 //serp

目前智能手机 2 大主流操作系统,安卓和 iOS,先拿三星手机浏览器 Android 4.2 测试了下,将标题复制 + 粘贴到字数统计性能比较工具里计算,不触发截断上限是 52 字节。
又上京东分 24 期买了个 iPhone4s Safari 浏览器 iOS 7.1.2 测试。pc 端访问 ,有前缀当前页排名 + 后缀 2 点省略号,到了 iPhone 上,无前缀当前页排名,但后缀可能有 4 点省略号。长度范围在 (50+2+[2,3]) 个字节,其它规则与 pc, iPad 端类似。

123456789012345678901234567890123456789012345678901234567890123_斗破苍穹吧_百度贴吧 83 字节 //网页
搜索结果只显示 3 字节省略符号 ...

展现下限亦是 3 个省略号,最少标题是 3 字节,与 pc, Pad 版相同,不再赘述,建议移动端标题范围是 3-52 字节。

触屏版
极速版

1.3.2 截断与分词技术



第2章 其它发现

2.1 pc 端

2.1.1 省略符号不止出现于标题末尾

案例 11

...123456789012345678901234567890123456789012345678901234567890 //serp

第 1 种情况是省略符号 "…" 作为前缀。

...batang开头的字库文件,这个文件大小为15.5 MB 和 C:..._百度知道 //serp

第 2, 3 种情况是省略符号作为前后缀出现,并且末尾还有 _百度知道,实际标题只显示了 48 字节。

2.1.2 百度按照标题宽度折行

.t{font-weight:normal;font-size:medium;margin-bottom:1px}

标题字体大小是默认的中等,而常见的 16 px, 540 / 16 = 33.75,一行最多展示 33 个汉字,大于 64 字节。

百度是按标题总的宽度截断,而非字数,只需查看 CSS 便可证明。

#content_left {
width:540px;
padding-left:138px;
padding-top:5px;
}

搜索结果宽度

#rs table {
width:540px;
}

(有趣的是相关搜索宽度和搜索结果宽度保持一致。)

案例 12
是否折行的测量标准按您的浏览器字体字号而不同。
123456789012345678901234567890123456789012345678901234567890123

当 chrome 浏览器配置是一个阿拉伯数字宽度为 9 px,SERP 显示是 540 px,只能放 60 个 9 px 的宽度,不可避免出现两行标题。

2.1.3 百度搜索结果标题 HTML 实体转换现象

虽然可见标题长度是 (61+3) 字节,但 HTML 实体转换为字符前,源代码的搜索结果标题长度可以不止 (61+3) 字节。

案例 10

Don't use ABCDEFGHIJKLMNOPQRSTUVWXYZ `1234567890-=~!@#$%^&*()... //serp

您所看到的实质是浏览器经过一次 HTML 实体转换的标题。在浏览器中查看 HTML 源代码

Don&#039;t use ABCDEFGHIJKLMNOPQRSTUVWXYZ `1234567890-=~!@#$%^&amp;*()...

2.1.4 pc 端访问 m.baidu.com 标题长度上限

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 种情况。
1. 转换为半角(可能包含于繁简转换词库),过滤重复 2. 不转换为半角,过滤重复 3. 不转换为半角,不过滤重复,与半角标点符号是同义词 4. pc 端访问 m.baidu.com,搜索词包含可转换半角标点符号,转换为半角,过滤重复 5. pc 端访问 m.baidu.com,搜索词不包含可转换半角标点符号,不转换为半角,过滤重复

2.1.5 过滤反复出现的标题符号

急急急急急急急,难难难难难****** HELP ME!!!!! -CSDN论坛-CSDN.NET-... 68 字节 //网页
急急急急急急急,难难难难难*** HELP ME!!! -CSDN论坛-CSDN.NET-... 62 字节 //serp

百度将 ******!!!!! 分别过滤为 ***!!!

【图】【【【【【【【【世嘉日常保养之材料选择】】】】】】】】_世嘉论坛_汽车之家论坛 82 字节 //网页
【图】【【【世嘉日常保养之材料选择】】】_世嘉论坛_汽车之家论坛 62 字节 //serp

连续并且重复 3 次以上的鱼尾号 替换为 【【【,而 1 个不连续的鱼尾号 不受影响。

2.1.6 全角标点符号转换为半角

下面这些全角标点符号在普通搜索结果(as)会被替换为半角,在百度搜索框内输入下列标点符号即可看到替换现象。 ==> |   竖线 ==> ,   逗号 ==> ;   分号 ==> :   冒号 ==> ?   问号 ==> !   叹号 ==> -   连接号 ==> (   左圆括号 ==> )   右圆括号 ==> {   左花括号 ==> }   右花括号     ==> '   左单弯引号     ==> '   右单弯引号

2.2 平板电脑

 2.2.1 百度搜索结果标题 HTML 实体转换现象

2.3 智能手机

 2.3.1 标题折行

宽度自适应
百度移动搜索优化指南2.0提到

用户在百度移动搜索中输入 query 搜索到你的页面时,title 作为最重要的内容展现在搜索结果中,主题明确、吸引眼球的 title 能够使用户第一时间理解你页面的主题是否符合他的需求,进而更快捷地从众多搜索结果中选择你点击你。
主题明确;
简洁扼要,不罗列,尽量不超过 17 个中文汉字,否则会折行;
如果你的品牌知名度高,品牌词最好能够展现出来;
吸引眼球

17 个汉字似乎是 iPhone4s 竖屏只有 320 宽度展现的上限附近,原理与 2.1.2 百度按照标题宽度折行类似。

 2.3.2 百度搜索结果标题 HTML 实体转换现象

%27 是用 URL 编码形式表示的 ASCII 字符(十六进制格式)。十六进制格式用于在浏览器和插件中显示非标准的字母和字符。'

【百度对关于url中带#被收录的问题反馈】里 lvxianlei2010 澄清道
关于 url 中带 # 被收录,之前跟站长平台的刘老师反馈过了,她让百度工程师看了一下,特说明如下:
1. 百度是根据转码后的 url 进行抓取的,之前大家发现搜索结果中出现 # 的 url 的 case,一般是原 url 把 # 转码成了 %23(url 编码转码的知识大家网上搜就知道了);如http://t.ifeng.com/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/#)
2. 当百度抓取转码后的 url,在搜索结果中又把 %23 解码成 #,因此大家看到了搜索结果中出现 # 的 url。


第3章 中英文混合字数统计代码比较

“工欲善其事,必先利其器”,分析百度搜索结果标题长度前,先要找到适宜的字数统计工具。只是为了您的阅读体验,放到后面才介绍。

3.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 位二进制数字

3.2 百度计算中文长度验证

汉语字符不同于英语字符,有 3 种常见长度,分别是 2, 3, 4 字节。

案例 13

<?php echo strlen('百度搜索结果URL参数解析疑问 - 搜外问答');?>
中文 16 个字符
非中文 6 字节
PHP strlen() 函数
华文 = (54 - 6) / 16 = 3 字节
改·字数统计函数
华文 = (38 - 6) / 16 = 2 字节

3.2 百度计算朝鲜语长度验证

韩国延世大学医院(연세세브란스 병원)-综合医院-韩国馆-帮5买
韩国延世大学医院(연세세브란스 병원)-综合医院-...
非韩文长度为 32 字节,연세세브란스병원 根据上述截断规则,8 个韩文是 4 × 8 = 32 字节。

照着朝鲜语一路推下去,各种转码字节数很难用改·字数统计函数兼容,实际上百度仅对几种转码较为支持,将中文转为小语种导致的乱码字节数通常大于字数统计函数 64 字节上限。下面亦提到用户电脑上没有安装适合的字体也无法正常显示和正常统计字节。

XML 和 Unicode XML 及其子集 XHTML 采用 UTF-8 作为标准字集,理论上我们可以在各种支持 XML 标准的浏览器上显示任何地区文字的网页,只要电脑本身安装有合适的字体即可。可以利用 &#nnn; 的格式显示特定的字符。nnn 代表该字符的十进制 Unicode 代码。如果采用十六进制代码,在编码之前加上 x 字符即可。但部分旧版本的浏览器可能无法识别十六进制代码。 案例 十六进制 ♠ 十进制 ♠

中日韩统一表意文字

但是另一方面,也有批评认为 Unicode 收入大量错讹字及写法高度相似的同一字的不同字形本身就是不应该的。电脑文本本身永远不可能完全无损地记录文献,且文献本身也会因传抄制版等原因略有不同,如果把每个字的各种写法全部编码,不仅浪费空间,而且检索困难,写法稍有不同就无法检出,以至于检索字词时必须反复检索其不同写法,造成重复劳动,对文献研究反而是种妨碍,例如 Unicode 中将避讳的缺笔字也进行编码,在检索文献时,这些字无法检索出,反造成困扰。完全无损地研究、记录文献只能通过查看原本或照相复印版来完成,把无损保存转嫁给编码是错误的。

通过百度搜索的实际情况,结合维基百科对 Unicode 的简介,很可能是采用一一对应的方式简单地把 UTF-8, GBK, BIG5, etc. 编码的繁体字词自动转换为简体字词以提升检索速度。 引用 后来随着我们不断的执着的去强调必须一秒内出结果,必须99.9甚至99.99%, http://www.huxiu.com/article/102520/1.html独家探营百度攻城狮学堂:百度的技术投入、实力与看家本领 而省略了十进制或十六进制 Unicode 代码,导致出现了百度搜索繁体字,却很少在 SERP 看到繁体字的现象。反之无法或很难检索到十进制或十六进制 Unicode 代码的华文。非要完美在百度搜索结果展现繁体字,并被搜索到,通过编码是不合情理的,更好的建议是在缩略图里展示异体字。

百度查询词过滤机制(filter) 检索词带有 http:// 会被自动过滤掉,其他一些会造成恶意攻击的字符亦会被过滤。

3.3 百度字数统计函数与计算搜索结果标题是否为同一函数

案例 17
Рослинництво, тваринництвотавет...

Рослинництво, тваринництвотавет...
百度改·字数统计函数 63 字节
正则表达式 45 字节
PHP strlen + mb_strlen 函数 48.5 字节

截图中上方标题约为下方标题长度一半,都触发截断,只有改·字数统计函数的计算结果与前述标题字节上限结论一致。 其他 2 种字数统计能解释标题长度为何较短,但与触发标题字节上限误差较大。

3.4 速度测试

★★☆☆☆ 2 星 改·字数统计函数采用 for 循环遍历每个字符,速度较慢,适合少量计算。 ★★★☆☆ 3 星 正则表达式处理较短单一字符集有优势。 ★★★★★ 5 星 PHP strlen + mb_strlen 函数的优点是无论多少字数,速度快捷稳定。

3.5 兼容性测试

案例 15

···(3 个间隔号)
改·字数统计函数 6 字节
正则表达式 4 字节
PHP strlen + mb_strlen 函数 4.5 字节
вуліца(白俄罗斯)
改·字数统计函数 12 字节
正则表达式 8 字节
PHP strlen + mb_strlen 函数 9 字节

★★★★★ 5 星 论文主要用解释百度标题计数,改·字数统计函数兼容性自是最好。 ★★★☆☆ 3 星 正则表达式缺陷在于小范围的字符集内有效,超出中英文字符等集合便失效了。 ★★★☆☆ 3 星 当然 PHP 自带函数兼容性比正则表达式好不到哪里。

3.6 速度与兼容性最优化方案

您可在顶上文本框内自行反复测试速度与兼容性。
最少限制与应用范围考虑,百度搜索结果基本属于中英文符号混杂 64 字节以内标题为主,使用百度的改·字数统计函数最合适。

3.7 字数统计工具结果比较

案例 16
乌克兰语网站 [5] 测试各个字数统计工具算法差异

Рослинництво, тваринництво та ветеринарія, технічне забезпечення :: Аграрний сектор України 动植物与兽医学,技术支持: 乌克兰农村经济
微软 word2010 10 字数
站长工具 66 字符
爱站网 91 字符
正则表达式 123 字节
PHP strlen + mb_strlen 函数 130 字节
搜外 163 字节
排版助手 166 字节
有一个网站 169 字节
百度改·字数统计函数 169 字节

站长工具、爱站网、九九参考计算网、工具猫、xpcha、正则表达式、PHP 函数等字数统计结果与百度计算方式相去较远。
搜外seo综合诊断较为接近百度字数统计结果,缺点是运行耗时长及受限于只能查询指定域名,使用范围不大。
排版助手作为网络编辑常用的工具,很接近百度计算方式,很实用,不过仍有误差。
有一个网站在线字数统计 [6] 与百度改·字数统计函数计算结果一致,不过在间隔号、回车等符号计算方法与之不同。


3.8 PHP 源码


百度改·字数统计函数 [7]

<?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() [8]
函数会把一些预定义的 HTML 实体转换为字符。
ENT_QUOTES - 解码双引号和单引号。
预定义的字符有
&amp; 成为 & 和号
&quot; 成为 " 双引号
&#039; 成为 ' 单引号
&lt; 成为 < 小于
&gt; 成为 > 大于

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:
文件类型限定搜索: 搜索结果限制为特定的文件扩展名结尾的网页 [9]
百度支持的扩展名和类型
PDF Adobe Acrobat
Microsoft Excel
Microsoft Powerpoint
Microsoft Word



// srcid = 1525 [10] ,全部是百度文库
// 其中的"all"表示搜索百度所有支持的文件类型 [11]
// bug
// 得到的前缀是 【LRC】,这个 bug 最晚在 2012年01月出现
// 得到的前缀是 【LRC】,这个 bug 最晚在 2012年01月出现
分析 bug 可能原因
案例 18

【LRC】 【网页搜索】本地搜索模块
      【网页搜索】结果页模版

百度本地搜索结果中出现【LRC】前缀,标准结果页却显示 Word 图标,可能是早期模版没有被 PK 掉所致。

SERP
search engine results page 搜索引擎返回查询结果列表页的英文缩写。

省略符号 "…"
用于截断表示搜索结果标题超出限制的部分,pc 与 Pad 版省略符号是 3 字节,智能手机移动端省略符号为 2-4 字节。

UTF-8
一种针对 Unicode 的可变长度字符编码(定长码),可以有 1-3 字节不同长度。


参考资料

1.    
2.    
3.    
4.     ©2014 MusicFE · @音乐前端 Via MusicLab
5.    
6.    
7.    
8.    
9.    昝辉. 第2章 了解搜索引擎//SEO实战密码:60天网站流量提高20倍(第2版). 博文视点 2014年1月第8次印刷. 北京: 电子工业. 2012.5: 第60页 ISBN 7-121-16767-6 (简体中文)
10.    
11.    Enge, Eric; Stephan Spencer; Rand Fishkin; Jessie C. Stricchiola. 第2章 搜索引擎基础//SEO艺术. 昝辉 译 2012年4月第1次印刷. 北京: 电子工业. 2012.4: 第53页. ISBN 7-121-16159-9 (简体中文)

下一篇 百度 HTTP 接口参数