于网站不收录,需要分情况讨论,
比如:新站点不收录、产品或者案例页面不收录、新发文章不收录、栏目页面不收录、聚合页面不收录、当天不收录、一周或者一个月不收录、网站被K、降权后恢复不收录等。。。。。
不同的情况需要不同的方法去应对。
今天科牛就结合自己的经验,分享下我处理这些问题的心得。
一、新站点,一个月了还没有收录
首先需要排除服务器访问慢、被人攻击的情况,其次排除网站上有灰色、违规内容,再者排除网站源代码DIV+CSS的问题。
以上都没问题,那么就去发外链,最简单的,百度搜“超级外链工具”,这个是免费的。
如果觉得免费的不够,可以购买付费外链,几十块钱几百条。
然后再去换友链,一般情况下,你一个新站点,没收录没排名是很难换到高质量的友链的,此时,可以去添加一些友链交换的qq群,在群里找个大哥,给人发个红包,让人帮你挂几天。
当然,也可以直接去百度搜索跟你同类型的网站,联系对方站长,谈好价格直接付费购买,这种方法虽然笨一点,但交换来的友情链接质量一般比较高,因为人家有排名啊!
如果以上工作都做了,最后还是没有收录,那么可以到百度站长平台提交反馈,请百度工作人员帮忙排查原因并放出首页收录。
目前,根据科牛平时给客户搭建的新网站案例来看,正常情况,新站点的首页收录时间一般在两周到一个月之间,如果超过一个月还没有收录,大概率是有问题了,如果你的外链、友链都做了,文章每天也按时发布,那么基本上可以判断网站服务器、网站内容、源代码这三项中,必定有一个出问题了,这时就需要进一步深入排查了!
二、企业站,已经搭建了一段时间,首页已收录,但新发布的文章迟迟不收录
首先排查原因:
网站是否有中途改版或更改首页关键词的情况,这一点是非常影响百度收录的因素,尽量不要对网站进行太大的改动,关键词等在建站之初就应该确定好。
企业站,基本上都有一个通病,就是内容一般都不持续更新或更新数量少,这也就导致百度抓取次数会比较低,抓取不及时就会导致收录慢或不收录。
且企业站存在严重的内容同质化问题,很多站点都是采集复制的内容,文章原创度差。
建议:
企业站或者中小站长,首先要做到人工定时更新养站,比如日均5篇,内容尽可能伪原创或原创,风雨无阻,有能力的话保证每个页面或栏目页做到内容更新,这样即可提升网站抓取的次数以及提升收录速度。
另外,一年以内的新站点,在第3个月到第7个月之间的某一段时间里,网站会有一个秒收期,就是在这段时间内,不论你的网站发布任何内容都会秒收,这时,配合上权重操作,是上排名的黄金期!
过了这个黄金期之后,就会继续出现不收录的情况,原因是爬虫低质。
此时,还是老套路,花钱买外链、换友链,增加非首页的页面抓取频次。
3个月后,如果发现网站还是老样子,不要慌,先去看网站索引,只要索引一直增长就没问题,因为索引是网站收录的根本,只要索引不掉,即使收录掉了,过几天必定也会涨上来。
三、网站被降权、被K,内容页不收录怎么办?
网站被k或降权,首要需要找出降权的原因,且期间要保证网站能正常访问,保证网站正常更新,及时提交新增加的链接。
好好的站点被K被惩罚了,那肯定是自己的问题,百度官方后台是有记录每一个站点是否惩罚过的,可以查看下具体是什么程度。
首页K了的话,请继续通过内容页面补救,时间会很长;
栏目或频道页被K了的话,请开设其它栏目或二级域名补救,时间特长;
全站被K了的话,我建议你放弃,更换其它域名吧;
优化网站还是要正规手法,不然代价都是很大的!
网站被K或者降权的恢复周期,一般1个月起步,3-6个月是正常情况!
四、网站新增加的聚合页面不收录、无排名
聚合页想要有收录和排名,最常见的是标签tag做法,通过标签的超链接来增加聚合页面的权重。
分析过很多客户的网站,科牛发现,tag页的收录和排名一般都是优于文章页的。
如果你的聚合页面没有收录和排名,那么问题可能在于:
1、标题的写法存在问题
比如,tdk没有设置好,标题只有一个关键词或者是几个关键词的堆叠,并没有拓展及延伸其他的相关需求。
2、聚合页面的内容相关程度低,内容质量少
作为一个聚合页面,一定是需要大量的文章内容来支撑的,建议每个聚合页面至少10条以上内容,尽可能做到无空白页面。
3、网站自身权重低
网站首页都没什么权重,次级的聚合页面就更不用提了,建议适当交换一些内页友情链接,最好是有相关性的,10个左右即可,不用太多!
五、企业站分类栏目排名的seo优化方法
企业站的重心一般都会集中在产品列表页面,但一般来说,产品列表页面想要获取比较大的流量是很困难的,因此可以直接把产品页面设置到首页,因为首页的收录会比栏目页快很多,再配合上首页的营销页面,有助于更快的把产品关键词排名上去,不过需要注意的是,首页必须时刻保持更新!
以上,就是在日常工作中给客户解决问题时,科牛积累的一些经验心得,希望能够给广大站长或者seo从业人员一点帮助!
今天就来聊聊在为了您更好的体验,本文章聊聊如何仅支持谷歌浏览器访问查看页面?这篇文章中提到的浏览器兼容问题,以此篇文章来证明自己并非不了解浏览器兼容性问题,而是当时其他因素导致选择了一刀切的方法来处理需求(我就是一个不粘锅)。
嘿,xdm~既然点进来了,不妨就继续看下去吧^_^
所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况。
上面的定义就是大白话,我们来看看来自百度百科的权威解释:浏览器兼容性问题又被称为网页兼容性或网站兼容性问题,指网页在各种浏览器上的显示效果可能不一致而产生浏览器和网页间的兼容问题。在网站的设计和制作中,做好浏览器兼容,才能够让网站在不同的浏览器下都正常显示。而对于浏览器软件的开发和设计,浏览器对标准的更好兼容能够给用户更好的使用体验。
造成浏览器兼容性问题的根本原因就是各浏览器使用了不同的内核,并且它们处理同一件事情的时候思路不同。
怎么理解上述文字?即:不同浏览器使用的内核及所支持的HTML等网页语言标准不同,以及用户客户端的环境不同(如分辨率不同)造成了显示效果不能达到理想效果。
前端开发经常需要检查浏览器的兼容性,这里推荐(Can I Use)这个查询网站。它是一个针对前端开发人员定制的一个查询CSS、JS、HTML5、SVG在主流浏览器中特性和兼容性的网站,可以很好的保证网页在浏览器中的兼容性。有了这个工具我们就可以快速地了解到代码在各个浏览器中的兼容情况了,强烈推荐一波,大家赶紧去体验吧?!界面效果如下图所示:
工具只能给我们显示查询的特性在不同浏览器上的兼容情况,至于如何解决兼容问题还得看下述的解决办法→
1、不同浏览器的标签默认的内外边距不同
解决方案:*{margin: 0; padding: 0;}
其实清除浏览器自带的默认样式,每个前端开发者所用的方法大同小异,这里给出我选用的清除默认样式的重置样式代码:
/**
* 该文件用于清除浏览器样式
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
padding:0;
margin:0;
border:0;
outline: 0;
font-family: "Helvetica Neue For Number", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
word-wrap:break-word;
}
html, body {
width: 100%;
height: 100%;
}
a {
text-decoration: none;
-webkit-tap-highlight-color:rgba(255,255,255,0);
}
ul, ol {
list-style-type: none;
}
textarea {
resize: none;
}
/*去除input button默认样式*/
input, button, textarea {
-webkit-appearance: none;
-webkit-tap-highlight-color: rgba(255, 225, 225, 0);
padding: 0;
border: 0;
outline: 0;
}
// 修改placeholder属性默认文字颜色
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
/* WebKit browsers */
color: #999;
}
input:-moz-placeholder, textarea:-moz-placeholder {
/* Mozilla Firefox 4 to 18 */
color: #999;
}
input::-moz-placeholder, textarea::-moz-placeholder {
/* Mozilla Firefox 19+ */
color: #999;
}
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
/* Internet Explorer 10+ */
color: #999;
}
除了自己定义清除默认样式的代码,也可选择引用别人写好的成熟插件Normalize.css来清除默认样式;
2、图片加a标签在IE9中会有边框
解决方案:img{border: none;}
3、IE6及更低版本浮动元素,浮动边双倍边距
解决方案:不使用margin,使用padding
4、IE6及更低版本中,部分块元素拥有默认高度
解决方案:给元素设置font-size: 0;
5、a标签蓝色边框
解决方案:a{outline: none;}
6、IE6不支持min-height属性
解决方案:{min-height: 200px; _height: 350px;}
7、IE9以下浏览器不能使用opacity
解决方案:Firefox/Chrome/Safari/Opera浏览器使用opacity;IE浏览器使用filter
opacity: 0.7; /*FF chrome safari opera*/
filter: alpha(opacity:70); /*用了ie滤镜,可以兼容ie*/
8、IE6/7不支持display:inline-block
解决方案:{display: inline-block; *display: inline;}
9、cursor兼容问题
解决方案:统一使用{cursor: pointer;}
10、IE6/7中img标签与文字放一起时,line-height失效的问题
解决方案:文字和<img>都设置float
11、table宽度固定,td自动换行
解决方案:table设置 {table-layout: fixed},td设置 {word-wrap: break-word}
12、相邻元素设置margin边距时,margin将取最大值,舍弃小值
解决方案:不让边距重叠,可以给子元素加一个父元素,并设置该父元素设置:{overflow: hidden}
13、a标签css状态的顺序
解决方案:按照link--visited--hover--active的顺序编写
14、IE6/7图片下面有空隙的问题
解决方案:img{display: block;}
15、ul标签在Firefox中默认是有padding值的,而在IE中只有margin有值
解决方案:ul{margin: 0;padding: 0;}
16、IE中li指定高度后,出现排版错误
解决方案:设置line-height
17、ul或li浮动后,显示在div外
解决方案:清除浮动;须在ul标签后加<div style="clear:both"></div>来闭合外层div
18、ul设置float后,在IE中margin将变大
解决方案:ul{display: inline;},li{list-style-position: outside;}
19、li中内容超过长度时,用省略号显示
li{
width: 200px;
white-space: nowrap;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
overflow: hidden;
}
20、div嵌套p时,出现空白行
解决方案:li{display: inline;}
21、IE6默认div高度为一个字体显示的高度
解决方案:{line-height: 1px;}或{overflow: hidden;}
22、在Chrome中字体不能小于10px
解决方案:p{font-size: 12px; transform: scale(0.8);}
23、谷歌浏览器上记住密码后输入框背景色为黄色
input{
background-color: transparent !important;
}
input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill{
-webkit-text-fill-color: #333 !important;
-webkit-box-shadow: 0 0 0 1000px transparent inset !important;
background-color: transparent !important;
background-image: none !important;
transition: background-color 5000s ease-in-out 0s;
}
24、CSS3兼容前缀表示
写法 | 内核 | 浏览器 |
-webkit- | webkit渲染引擎 | chrome/safari |
-moz- | gecko渲染引擎 | Firefox |
-ms- | trident渲染引擎 | IE |
-o- | opeck渲染引擎 | Opera |
如:
.box{
height: 40px;
background-color: red;
color: #fff;
-webkit-border-radius: 5px; // chrome/safari
-moz-border-radius: 5px; // Firefox
-ms-border-radius: 5px; // IE
-o-border-radius: 5px; // Opera
border-radius: 5px;
}
1、事件对象的兼容
e=ev || window.event
2、滚动事件的兼容
scrollTop=document.documentElement.scrollTop || document.body.scrollTop;
3、阻止冒泡的兼容
if (e.stopPropagation) {
e.stopPropagation();
} else {
e.cancelBubble=true;
}
4、阻止默认行为的兼容
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue=false;
}
5、添加事件监听器的兼容
if (target.addEventListener) {
target.addEventListener("click", fun, false);
} else {
target.attachEvent("onclick", fun);
}
6、ajax创建对象的兼容
var xhr=null;
if (window.XMLHttpRequest) {
xhr=new XMLHttpRequest();
} else {
xhr=new ActiveXObject("Microsoft XMLHTTP");
}
7、鼠标按键编码的兼容
function mouse (ev) {
var e=ev || window.event;
if (evt) {
return e.button;
} else if (window.event) {
switch (e.button) {
case 1: return 0;
case 4: return 1;
case 2: return 2;
}
}
}
8、在IE中,event对象有x,y属性,Firefox中与event.x等效的是event.pageX,而event.pageX在IE中又没有
x=event.x ? event.x : event.pageX;
9、在IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性
var source=ev.target || ev.srcElement;
var target=ev.relatedTarget || ev.toElement;
10、在Firefox下需要用CSS禁止选取网页内容,在IE用JS禁止
-moz-user-select: none; // Firefox
obj.onselectstart=function() {return false;} // IE
11、innerText在IE中能正常工作,但在FireFox中却不行
if (navigator.appName.indexOf("Explorer") > -1) {
document.getElementById('element').innerText="IE";
} else {
document.getElementById('element').textContent="Firefox";
}
12、在Firefox下,可以使用const关键字或var关键字来定义常量;在IE下,只能使用var关键字来定义常量
解决方案:统一使用var关键字来定义常量
1、禁止iOS识别长串数字为电话
解决方案:<meta content="telephone=no" name="format-detection" />
2、禁止iOS弹出各种操作窗口
解决方案:-webkit-touch-callout:none
3、禁止Android手机识别邮箱
解决方案:<meta content="email=no" name="format-detection" />
4、禁止iOS和Android用户选中文字
解决方案:-webkit-user-select:none
5、iOS下取消input在输入的时候英文首字母的默认大写
解决方案:<input autocapitalize="off" autocorrect="off" />
6、Android下取消输入语音按钮
解决方案:input::-webkit-input-speech-button {display: none}
7、在移动端修改难看的点击的高亮效果,iOS和安卓下都有效
解决方案:* {-webkit-tap-highlight-color:rgba(0,0,0,0);}
8、iOS下input为type=button属性disabled设置true,会出现样式文字和背景异常问题
解决方案:使用opacity=1;
9、input为fixed定位,在iOS下input固定定位在顶部或者底部,在页面滚动一些距离后,点击input(弹出键盘),input位置会出现在中间位置
解决方案:内容列表框也是fixed定位,这样不会出现fixed错位的问题
10、移动端字体小于12px使用四周边框或者背景色块,部分安卓文字偏上bug问题
解决方案:可以使用整体放大1倍(width、height、font-size等等),再使用transform缩放
11、在移动端图片上传图片兼容低端机的问题
解决方案:input 加入属性accept="image/*" multiple
12、在Android上placeholder文字设置行高会偏上
解决方案:input有placeholder情况下不要设置行高
13、overflow: scroll或auto;在iOS上滑动卡顿的问题
解决方案:加入-webkit-overflow-scrolling: touch;
14、iOS中日期如:2022-02-22 00:00:00格式的时间转时间戳不成功
解决方案:需要将时间中的'00:00:00去除之后才能转为时间戳'
15、iOS中需要将时间格式转为/,如:2022/02/22
let date='2022-02-22';
let dateStr=date.replace(/-/g, '/'); // 2022/02/22
16、移动端click300ms延时响应
解决方案:使用Fastclick
window.addEventListener( "load", function() {
FastClick.attach( document.body );
}, false );
17、移动端1px边框问题
解决方案:原先元素的border去掉,然后利用:before或者:after重做border,并transform的scale缩小一半,原先的元素相对定位,新做的border绝对定位
.border-1px{
position: relative;
border:none;
}
.border-1px:after{
content: '';
position: absolute;
bottom: 0;
background: #000;
width: 100%;
height: 1px;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
}
至此,关于浏览器兼容性问题的相关知识和解决方案就聊完了,最后还穿插了关于移动端兼容的问题描述,肯定还有很多没有总结到的兼容性问题,希望xdm在下方评论↘提供。
看文至此,顺手点个赞再走呗,3Q^_^
伙伴们,如果觉得本文对你有些许帮助,点个或者?个关注在走呗^_^ 。另外如果本文章有问题或有不理解的部分,欢迎大家在评论区评论指出,我们一起讨论共勉。
随时随地给大家提供技术支持的葡萄又来了。这次的事情是这样的,提供demo属于是常规操作,但是前两天客户突然反馈压缩传输模块抛出异常,具体情况是压缩内容传输到服务端后无法解压。
由于代码没有发生任何变动,前端相关依赖也没有升级,服务端java版本也没有变化,所以我们可以推定为环境问题;进一步仔细检查,经过反复对比后突然发现服务端收到的压缩内容变长了;和前端请求内容进行对比,发现所有的\r和\n都变成了\r\n。
综合以上分析我们初步判断:问题出在了浏览器转译之中。为了验证猜想是否正确,葡萄将chrome版本回退到92版,异常消失,服务端接收的内容也没有被替换。
问题是顺利解决了,但是Chrome POST数据内容居然会在传输过程中发生变化。一直擅长大前端技术的葡萄绝不认输,为了弄明白这一原因,我们来看看POST的细节操作到底有什么。
控制字符
首先我们需要搞清楚几个控制字符的含义。
在代码管理中,在不同操作系统下CRLF会有很大不同。下面在不同系统中为大家实际演示一下:
在Mac Visual Code中新建一个文档默认为LF,而Windows中为CRLF,可以选择切换行尾序列的内容的类型。
Mac版Visual Code
Windows 版
面对这种情况,需要开发者统一CRLF,以免不同操作系统开发导致代码管理的混乱。
弄明白了在不同系统中,控制字符会出现不同的原因,接下来我们就需要搞清楚为什么POST的数据在传输过程中发生了变化。
我们来写个简单Demo测试一下。先在页面上放一个允许换行的textarea, 输入带换行的文本,获取内容看到只有\n转译。通过FormData直接post数据到服务端,然后直接返回,看到\n全部变成了\r\n。
var uploadData=document.getElementById("ta").value
var formData=new FormData();
formData.append("data", uploadData)
fetch("http://localhost:8088/spread/getpdf", {
body: formData,
method: "POST"
}).then(resp=> resp.text())
.then(text=> {
console.log(JSON.stringify(text));
document.getElementById("result").innerHTML=JSON.stringify(text)
})
浏览器标识:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.83 Safari/537.36
回退Chrome到92版本,发送和接收文本此时编为一致:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
深入探究这一原因,我们了解到互联网请求意见稿2046(RFC 2046)4.1.1.中有明确说明:
“ The canonical form of any MIME‘text’ subtype MUST always represent a
line break as a CRLF sequence. “
这里我们可以看到所有的文本类型都要使用CRLF,而Chrome只是修复了一个“bug”,对于用户而言,在普通文本中用户感知不到CR、LF和CRLF的区别,但是当使用场景转换到解压的文本内容就变得十分重要。
大家都知道POST是HTTP的一个常用方法,而另一个我们常用的方法是GET。
关于GET和POST区别以及使用相关问题这里不做赘述,要解决POTS传输的数据变化问题,最相关的是Content-Type。
首先我们来了解Content-Type和MIME分别是什么:
Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。
在POST中常用的Content-Type有application/x-www-form-urlencoded、multipart/form-data和application/json。
1、 application/x-www-form-urlencoded
将需要内容提交表单后,内容会按照name1=value1&name2=value2的方式编码,并且key和valu e都会进行URL转码。
对于"\n"和"\r" 会被转码为'%0A'和'%0D',通过这种传输方式,避免了浏览器的对CRLF的修正可以解决以上问题。
但是这样转码会增加文本长度,原本1个字符变成了3个,结果是压缩的文本又变长了。
2、multipart/form-data
当需要想服务器提交文件时,就需要使用这种方式。前面代码中我们可以看到当formData是普通文本是会被修正,为了解决这个情况我们可以将string内容封装到Blob中作为文件流传输,来避免修正。
这样传输,服务端会以文件方式收到内容,直接读取Stream内容;对于压缩文本,这种处理方式最优。
var formData=new FormData();
formData.append("data", uploadData)
formData.append("data1", new Blob( [uploadData]))
上图展示了同样的内容,使用不同方式进行传输。
3、 application/json
Json也是目前比较流行的传输方式,json的内容在post传输中也不会被改变,如果文本内容不长,也是不错的方式。
fetch("http://localhost.charlesproxy.com:8088/spread/postjson", {
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({data: uploadData}),
method: "POST"
}).then(resp=> resp.text())
.then(text=> {
console.log(JSON.stringify(text));
document.getElementById("result").innerHTML=JSON.stringify(text)
})
作为一个前端er,除了HTML、CSS和Javascript三大件,熟练使用Axios等类库调用API,更不可忽视的是要了解如何调试网络请求,在项目出现问题时能快速定位到问题的所在。
这里提供了在 Angular 框架下动态加载js文件时返回 Content-Type 为text/html 的Demo,大家感兴趣的可以自行下载试试。
本人花费2个月时间,整理了一套JAVA开发技术资料,内容涵盖java基础,分布式、微服务等主流技术资料,包含大厂面经,学习笔记、源码讲义、项目实战、讲解视频。
希望可以帮助一些想通过自学提升能力的朋友,领取资料,扫码关注一下
记得转发+关注+私信
私信回复【2022面试资料】
领取更多学习资料
*请认真填写需求信息,我们会在24小时内与您取得联系。