[SQL]使用CLR存储过程方便快捷导出数据到Excel

mikel阅读(1035)

转载:http://www.cnblogs.com/NickYao/archive/2009/12/03/1616101.html

  今天早上看到一篇文章(Exporting to Excel Using a CLR Stored Procedure )觉得非常实用,就拿来跟大家分享一下。  
  这篇文章主要提供了一个SQL Server导出数据到Excel一个快捷方便的方式,如果你日常工作常常需要从数据库导出数据到Excel的话,你会发现这对你非常有用。
    

  好了,废话少说,我这里就简单说一下如何使用:
     1. 下载代码ExcelExport.zip
     2. 编译项目,把生成的dll复制到一个目录,例如:c:\CLR
     3. 在SQL SERVER上启用CLR

sp_configure'clr',1
reconfigure

  4. 使用Alter DATABASE 命令打开 Trustworthy 数据库属性

Alter DATABASE 数据库名 SET TRUSTWORTHY ON

  5. 创建程序集

Create ASSEMBLY ExportToExcel
FROM 
'C:\CLR\ExcelExport.dll' CLR 程序集存放的地方
WITH PERMISSION_SET 
= EXTERNAL_ACCESS

  6. 创建一个存储过程关联到上一步创建的程序集

Create PROCEDURE[dbo].[prc_ExportToExcel]
       @proc [nvarchar](100),
       @path [nvarchar](200),
       @filename [nvarchar](100),
       @params xml
AS
EXTERNAL NAME [ExportToExcel].[StoredProcedures].[ExportToExcel]

  7. 好了,到这里准备工作就算完成了,下面是使用的例子:

Declare @params xml
Set @params 
= '<params><param name="lastname" value="Smith" /><param name="country" value="US" /></params>'
exec prc_ExportToExcel 
'procname',‘Drive:\Directory\''Filename', @params

  a) 第一个参数是获取数据的存储过程名

  b) 第二个参数是输出的目录

  c) 第三个参数是输出的文件名,不需要带后缀

  d) 第四个参数是获取数据的存储过程需要的参数。name代表参数名,value代表参数值。

    如果获取数据的存储过程没有参数的话,就使用:Set @params ='<params></params>'

[ASP.NET].NET批量上传控件——HtmlInputFiles

mikel阅读(814)

转载:http://www.cnblogs.com/dreamof/archive/2009/12/02/1615515.html

  此控件支持多个文件同时上传,而且上传文件的数量、大小及格式可以根据自己的需要进行设置,并且使用非常简单。
  HtmlInputFiles控件下载

  1HtmlInputFiles控件属性

  下图是该控件的主要属性:
  

  属性名              功能

  FileFilter             设置上传文件的类型

  MaxCount               设置最多可以上传几个文件

  RecordCount            设置上传控件的初始值

  FileSize               设置上传文件的大小

  其它属性的功能一目了然,就不介绍了。

  2HtmlInputFiles控件运用

  下图为该控件使用中的截图
   
  

  “添加上传”按钮用来增加上传附件,“减少上传”按钮用来减少上传附件。

  具体使用如下:

  前台代码:

    <div>   

        <cc1:HtmlInputFiles ID="HtmlInputFiles1" runat="server" AddButtonVisible="True" MaxCount="15" RecordCount="1" FileFilter=".GIF|.JPG|.JPEG|.RAR|.TXT" />   

        <br />

        <asp:Button ID="BtnUpfile" runat="server" onclick="BtnUpfile_Click" Text="上 传" />

    </div>
  后台代码:

        protected void BtnUpfile_Click(object sender, EventArgs e)
        {

            if (this.HtmlInputFiles1.CheckAllPostedFile(true))

            {

                for (int i = 0; i <= this.HtmlInputFiles1.RecordCount; i++)

                {

                    System.IO.FileInfo info = new FileInfo(this.HtmlInputFiles1[i].PostedFile.FileName);

                    string fileName = info.Name;

                    string filePath = "UpLoads/" + System.Guid.NewGuid().ToString() + fileName;                   

                    this.HtmlInputFiles1[i].PostedFile.SaveAs(Server.MapPath(filePath));

                }

            }

        }

[HTML]你真的知道一个HTML及资源是如何load的吗?

mikel阅读(864)

转载:http://www.cnblogs.com/mindsbook/archive/2009/12/03/sequence_of_response.html

作者:朱涛

出处http://www.cnblogs.com/mindsbook/archive/2009/12/03/sequence_of_response.html

摘要

本文主要介绍浏览器请求一个URI后, 相应的html及其包含的外部资源(如js/css/image/flash)的下载顺序及其执行顺序.

在文中会有一个具体的例子来说明.

引入

完成了若干个基于WEB的项目, 也了解了从前端的js,css,html到后端python/php等, 二者如何交互, 最终浏览器如何执行, 这些在心里也已经很明确了. 不过一个问题一直萦绕在心中,那就是:

一个html有若干个外部资源(js,css,flash,image等),这些请求是何时下载的,又是何时执行的?

不清楚,不明白, 所以也就不知道我写的js究竟何时执行的, 也就不知道为什么很多高性能的建议是要将js置于一个 html底端的</body>之前.

如果你也不是很明确,请来和我一起学习吧.

具体分析

首先我们来看一个示例的html页面,如下:

<html>
<head>
<script src="/static/jquery.js" type="text/javascript"></script>
<script src="/static/abc.js" type="text/javascript">
</script>
<link rel="stylesheets" type="text/css" href="/static/abc.css"></link>
<script>
$(document).ready(function(){
$("#img").attr("src", "/static/kkk.png");
});
</script>
</head>
<body>
<div>
<img id="img" src="/static/abc.jpg" style="width:400px;height:300px;"/>
<script src="/static/kkk.js" type="text/javascript"></script>
</body>
</html>

它有如下几种资源:

  1. 3个外部js文件,1个inline js代码
  2. 1个外部css文件, 1个inline css代码
  3. 1个image文件,及1个js请求的image

总共是6个http request.

在分析之前,我们来看看firefox对这个html请求的结果, 如下图:

http://i48.tinypic.com/21n0hw7.jpg

我们再看看chrome(linux)对这个html的请求结果,如下图(图比较小,可以在新标签中打开):

http://i48.tinypic.com/wck1ue.jpg

我们先分析下,然后再去说明这2种请求结果的不同.

请求分析

首先说明下面这些描述主要是基于自己google, 咨询朋友和在 SO 和 IRC 上获得, 我并没有阅读相关的spec(当然我很想阅读,如果知道相关spec的朋友请留言谢谢), 不能保证其正确性和准确性,风险自担 :D.

基于相关的调研, 我的理解为, 对于一个URI请求, 浏览器会按照下面的请求和执行顺序进行:

  1. 一个线程对DOM进行下载(也就是html, 而不去管html中的外部资源)
  2. 另外一个线程会开始分析已经下载的DOM, 并开始下载其中的外部资源(如js, css, image等)
  3. 第三个线程(如果有的话)会去下载2正在下载的以外的外部资源
  4. 如果允许更多的连接, 更多的线程会继续下载其它资源

一个请求可以同时有多少个connection(线程), 取决于不同的浏览器, http1.1 标准中规定的是对于同一个server/proxy(也就是hostname) 不超过2个connection, 但是在实际的浏览器实现中, 具体如下:

Firefox 2: 2
Firefox 3: 6
Opera 9.26: 4
Opera 9.5 beta: 4
Safari 3.0.4 Mac/Windows: 4
IE 7: 2
IE 8: 6

所以请根据这个实际情况来思考上面的下载顺序.

然后我们看执行顺序(js的执行, css的应用等):

  1. 只要浏览器"看到了"了js代码,它就会执行
  2. 浏览器是从下到下,一行一行地执行
  3. 如果js代码位于一个函数或者对象中,则只有当函数或者对象被调用时才会执行
  4. 而所谓的direct code(不处于函数或者对象中的代码),则会从上到下顺序执行
  5. 当css文件下载完成时, 相应的样式也会应用到DOM上
  6. onload或者JQuery的$(document).ready()是在DOM下载完成后执行

在实际的浏览器中, 一般遇到<script>标签会自动block住其它线程的下载, 如firefox, 这也是为什么 在web开发中常常推荐将<script>标签置于</body>之前的原因.

但是并非所有的浏览器都block, 如chrome并不会block住其它的connection. 所以具体的load还需要参考具体的浏览器实现.

建议, 将<script></script>标签置于</body>之前, 这样可以在大多数情况下都得到较好的性能.

对Firefox和chrome的请求分析

我们回过头来看下上面2个图中的请求响应图.

Firefox

有如下特征:

  1. 首先下载html
  2. html下载完成后, 从上到下依次下载外部文件(js, css,img)
  3. js会block其它外部文件的下载
  4. 其它文件会并行下载

chrome

有如下特征:

  1. 首先下载html
  2. 从上到下依次下载外部文件(js,css,img)
  3. 各个资源的下载顺序是并行的

你可能会奇怪如果js可以并行下载,那么可能位于DOM下面的代码会先执行, 首先可以肯定的是 即使下面的js先完成下载,也不会影响到整体的从上到下的执行顺序,浏览器会维护这种顺序的关系, chrome的这种方式也是未来浏览器的一种趋势, 而这也是为什么chrome能够更快的原因之一.

有意思的一个插曲

在提出这个问题后,我便多方入手, 向朋友咨询, 向 SO 提出问题, 甚至去Firefox的 IRC 进行了提问,

回答的朋友还都是很耐心的, 不过, 他们大多向我问了一个问题 做WEB开发, 你为什么要了解这些细节.

对于这样的问题,我还是比较纳闷的, 我一直认为 一个好的程序员,不仅需要知道how, 还要知道what, 甚至why,

知道how,只说明你是一个合格的码工,只会简单地使用别人提供的东西来开发.

知道what, 说明你开始去关注背后是如何实现的, 随着时间推进, 这时候你会逐渐成为一个有经验的程序员.

知道why, 说明你开始向hacker的路迈进了, 开始逐步走向了技术牛人的路线了,长此以往你会有很大的成长的. 参考 How To Become A Hacker.

让我们去享受细节,本质的快乐吧,而不是只停留在我会的层面那么表面的快乐.

结论

浏 览器是各大厂商抢占的市场,无论是自主(Firefox, chrome, IE, Opera, Safari)或者基于一定的内核(遨游, 搜狗, TT, 360等), 但是可以肯定的是浏览器会更加强大, 遵守规范, 更快的响应等, 而我们WEB程序员的日子也会好过很多.

本文部分细节还是比较含糊, 后面可能还会在写一篇文章来进行更彻底,清晰的说明.

欢迎讨论.

后记

这次是不惜血本了, 之前积累了快400的 SO reputation score, 一下压出去了150个来寻找最满意的答案.

具体大家可以参考:

Load and execution sequence of a web page?

帖子中有较详细的回答,可以作为参考.

本文的源码

本文的rst源码链接在 这里 .

点击 下载pdf阅读 (如果浏览器不支持直接打开,请点击右键另存)

[JQuery]Jquery快速构建可拖曳的购物车-DragDrop

mikel阅读(828)

拖曳功能早已经成为各个网站吸引用户的一大亮点,那有没有想过如何把拖曳功能应用到电子商务网站的购物车功能模块中呢? 这样一来,购买者只需要把自己感兴趣的商品拖曳到自己的购物车中,也可以从购物车中删除商品 同时更新购物车的总体价格和数量。

那咱们就开始实例吧,本实例并没有链接数据库读取数据来初始化Products,而是创建了一些虚拟的商品如下:

 

1、  创建Product实体类

 

public class Product

    {

        public string Code { get; set;  }

        public string Name { get; set; }

        public string Description { get; set; }

        public double Price { get; set; }

}

 

2、  构建商品List<Product>

 

public class Product

    {

        public string Code { get; set;  }

        public string Name { get; set; }

        public string Description { get; set; }

        public double Price { get; set; }

}

 

3、创建DataList并绑定List<Product>

 

<asp:DataList ID="dlProducts" RepeatColumns="3"

         RepeatDirection="Horizontal" runat="server">

 

    <ItemTemplate>

 

    <div class="productItemStyle" price='<%# Eval("Price") %>'

         code='<%# Eval("Code") %>'  id='item_<%# Container.ItemIndex + 1 %>'>

    <li>

    <%# Eval("Code") %>

    </li>

    <li>

    <%# Eval("Name") %>

    </li>

    <li>

    <%# Eval("Description") %>

    </li>

 

     <li>

    $<%# Eval("Price") %>

    </li>

    </div>

 

    </ItemTemplate>

 

    </asp:DataList>

 

private void BindData()

{

    var products = GetProducts();

 

    dlProducts.DataSource = products;

    dlProducts.DataBind();

}

 

productItemStyle 样式名称

Container.ItemIndex动态生成连续的商品编号

 

4、  生成Products Div Draggable

下载最新的JQuery JS文件及其UI文件:

<script language="JavaScript" type="text/JavaScript" src="JQuery-1.2.6.min.js"></script>

<script language="javascript" type="text/javascript"

src="JQuery-ui-personalized-1.6rc4.min.js"></script>

 

页面初始化时生成Div Draggable

 

$(document).ready(function() {

 

        $(".productItemStyle").draggable({ helper: "clone", opacity: "0.5" });

)};

 

5、创建一个DropZone

 

DropZones 是购物车区域

 

$(".dropZone").droppable(

        {

            accept: ".productItemStyle",

            hoverClass: "dropHover",

            drop: function(ev, ui) {

 

                var droppedItem = ui.draggable.clone().addClass("droppedItemStyle");

 

                var productCode = droppedItem[0].attributes["code"].nodeValue;

                var productPrice =

                 getFormattedPrice(droppedItem[0].attributes["price"].nodeValue);

 

                var removeLink = document.createElement("a");

                removeLink.innerHTML = "Remove";

                removeLink.className = "deleteLink";

                removeLink.href = "#";

                removeLink.onclick = function()

                {

                    $(".dropZone").children().remove("#" + droppedItem[0].id);

                    updateTotal(productPrice * (-1));

                }

 

                droppedItem[0].appendChild(removeLink);

 

                $(this).append(droppedItem);

 

                updateTotal(productPrice);

            }

        }

        );

 

Accept参数:展示Class= productItemStyleDiv

hoverClass参数:当有Product放到DropZone时的样式

drop函数:当Product拖放到DropZone时出发的函数,此函数主要做了一个Product ItemClone,价格的计算、添加Remove按钮以及到点击Remove按钮时所触发的事件。

 

价格的计算updateTotal()函数

// update the total!

    function updateTotal(price) {

 

        total += parseFloat(price);

        $("#total").html(total.toFixed(2));

        $(".shoppingCartTotal").effect("bounce");

 

}

 

最终效果如下图:

 

 

 

英文原文地址:http://www.codeproject.com/KB/aspnet/JQueryShoppingCart.aspx

 

 

版权

作者:灵动生活

出处:http://www.cnblogs.com/ywqu

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

[图书]SEO Warrior

mikel阅读(751)

书名:SEO Warrior

ebook

作者:Jerkovic John
出版:O’Reilly Media 2009
ISBN:059615707X
格式:PDF;7.3MB;494页

下载链接/download link:
rapidshare

[MVC]ASP.NET MVC实践系列11-FCKEditor和CKEditor的使用

mikel阅读(833)

转载:http://www.cnblogs.com/nuaalfm/archive/2009/11/27/1612027.html

FCKEditor是一款强大的在线编辑器,简单实用,多浏览器兼容,免费开源,应用十分广泛,据他的官方网站上称有三百多万的下载量,而且无数的 知名大公司正在使用它。所以FCKEditor是很值得信赖的,现在 FCKeditor项目已转向下一代版本命名CKEditor的产品开发,基本上采用Fckeditor并对部分进行了重新设计和采用新技术以改善结构, 性能更好扩展性更强。下面我们来介绍一个这两个编辑器,对于FCKEditor我们只讲一下在ASP.NET MVC中的用法其配置可以参考官方文档。

一、FCKEditor使用:

1、FCKEditor在ASP.NET MVC中的应用:

首先到http://ckeditor.com/download下载FCKeditor 2.6.5(我下载的时候报地址暂时有问题,但FCKEditor网上保有量很多,可以任意下载一个),将下载好的文件解压缩然后拷贝到你项目的Content文件夹下:

View

 

View代码

Controller:

 

Controller

 1 [AcceptVerbs(HttpVerbs.Post)]
 2         [ValidateInput(false)]
 3         public ActionResult Test(string FckEditor1)
 4         {
 5             this.ValidateRequest = false;
 6             return Content(FckEditor1);
 7         }
 8         public ActionResult Test()
 9         {
10             return View();
11         }

 

 这里要注意[ValidateInput(false)]特性,它的目的是为了防止在提交时报“检测到有潜在危险的客户端输入值”,另外这里还有 个奇怪的现象就是这个View不能在Index.aspx中,在Index.aspx即使使用了[ValidateInput(false)]特性还是会 报错,换个新View就没这个问题了,不知道为什么?

2、Helper版

为了让大家使用的更简单,我写了个Helper版,大家参考下:

 

Helper

View:

 

代码

<script src="<%= Url.Content("~/Content/fckeditor/fckeditor.js") %>" type="text/javascript"></script>
     
<%=Html.FckEditor(Url.Content("~/Content/fckeditor/"), "lfm"new { x = "x" })%>

 

二、CKEditor使用

1、CKEditor在ASP.NET MVC中的应用:

首先到http://ckeditor.com/download下载CKEditor。

CKEditor在ASP.NET MVC的使用就相当的简单了,只需要在脚本中执行CKEDITOR.replace(id);id为你需要拥有编辑功能的textarea的id。

View:

 

代码

     <script src="<%= Url.Content("~/Content/ckeditor/ckeditor.js") %>" type="text/javascript"></script>
    
<% using (Html.BeginForm())
       { 
%>
    
<%= Html.TextArea("ckEditor1""Some Value",   new { @name="ckEditor1" })%>
    
<input type="submit" value="提交" />
    <% } %>
    
<p>
    
</p>

        
<script type="text/javascript">
            CKEDITOR.replace(
'ckEditor1');
     
</script>

结果:

 

2、CKEditor配置:

CKEditor配置也很容易, 使用CKEDITOR.replace方法,根据不同的参数来应用不同的配置,例如

 

代码

<script type="text/javascript">
     CKEDITOR.replace( 
'editor2',
      {
       extraPlugins : 
'uicolor',
       uiColor: 
'#14B8C4',
       toolbar :
       [
        [ 
'Bold''Italic''''NumberedList''BulletedList''''Link''Unlink' ],
        [ 
'UIColor' ]
       ]
      } );
    
</script>

得到的结果:

其他配置可以参考官方文档。同时_samples文件夹中也有大量例子可供参考。

3、CKEditor瘦身:

如果你觉得整个编辑器太大,你可以删除文件。

例如把_samples、_source、文件夹删除,进入lang文件目录,保留en.js、zh.js、zh-cn.js三个文件,其余的语言文件如果你用不到,可以删除。

三、参考

http://www.ff-bb.cn/logs/46479725.html

http://www.codeproject.com/KB/aspnet/fckeditor.aspx

 

我的ASP.NET MVC实践系列

ASP.NET MVC实践系列1-UrlRouting

ASP.NET MVC实践系列2-简单应用

ASP.NET MVC实践系列3-服务器端数据验证

ASP.NET MVC实践系列4-Ajax应用

ASP.NET MVC实践系列5-结合JQuery

ASP.NET MVC实践系列6-Grid实现(上)

ASP.NET MVC实践系列7-Grid实现(下-利用Contrib实现)

ASP.NET MVC实践系列8-对查询后分页处理的解决方案

ASP.NET MVC实践系列9-filter原理与实践

ASP.NET MVC实践系列10-单元测试

其他:

在ASP.NET MVC中对表进行通用的增删改

[MVC]ASP.NET MVC实践系列10-单元测试

mikel阅读(850)

转载:http://www.cnblogs.com/nuaalfm/archive/2009/11/26/1611420.html

最早接触单元测试是看了极限编程相关资料里边讲的测试驱动开发,然后下载了Nunit研究了一下,但并没产生多大的触动,因为那个时候做的都是些时 间紧任务重的事情,对于单元测试的直接感觉就是有可能比较费时间。直到看了《敏捷软件开发:原则、模式与实践》,里边那个保龄球计分程序很精彩,让我知道 了保龄球原来是这么计分的,更重要的是让我认识到测试驱动编程原来这样有意义,并且其实并不浪费时间(至于测试驱动编程到底有意义在哪里,我这里就不说 了,大家可以参阅Kent的《测试驱动开发》,Robert C. Martin的《敏捷软件开发:原则、模式与实践》,http://www.ibm.com/developerworks/cn/linux/l-tdd/http://www.ibm.com/developerworks/cn/java/j-xp042203/等)。在webform中对web层的逻辑很难做单元测试(当然我们可以利用mvp模式(参考:http://www.cnblogs.com/bluewater/archive/2006/12/11/589214.html#1219888) 来分解web层逻辑,但因为没有框架的支持,并且实现起来也不是很简单,也不是特别好理解,所以应用并不广泛)。ASP.NET MVC很好的解决了测试web逻辑的问题,可测试性也变成了ASP.NET MVC的优势之一。下面我们就来介绍一下如何在ASP.NET MVC中进行单元测试。

一、测试路由器:

我们首先利用mvc的模板创建一个解决方案,我们可以在Gloabal.asax.cs文件中发现如下代码

 

默认路由代码

 

下面我们就为这段代码写一个单元测试(如果对路由还不清楚请参见:ASP.NET MVC实践系列1-UrlRouting

 

测试代码

 

下面我们解释一下上面的代码

RouteCollection routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);

这两行的意思是将routes按照默认路由代码中的格式生成相应的路由。

var httpContextMock = new Mock<HttpContextBase>();
httpContextMock.Setup(c => c.Request.AppRelativeCurrentExecutionFilePath).Returns("~/Home/Index");

这两行的意思是创建一个HttpContextBase的mock类,这里我们使用的是MoQ框架来生成mock类(参见:MoQ(基于.net3.5,C#3.0的mock框架)简单介绍 )。

RouteData routeData = routes.GetRouteData(httpContextMock.Object);

这行的意思是从routes中获得路由数据,为下边断言路由中的内容作准备。

Assert.AreEqual("Home", routeData.Values["Controller"]);
Assert.AreEqual("Index", routeData.Values["action"]);
Assert.AreEqual("", routeData.Values["id"]);

这三行分别验证了路由中生成的Controller,action,id的正确性。

二、测试Controller与Action

1、测试ViewData

我们先来看一下ASP.NET MVC的默认模板中的测试代码:

 

Code

 

我们可以在测试代码中对viewData的内容进行验证,一般并不推荐使用弱类型的viewData来进行传递数据,下面我们来看一下如何来测试viewModel中的内容。

 

Code

 

2、测试RedirectToAction:

 

Code

 

三、测试View Helpers

我们常常会把一些牵扯到逻辑的View代码写到Helper中,所以测试Helper非常有意义,我们先写一个简单的Helper

 

Helper

 

这个Helper的完成的工作是将输入的集合数据分解然后按列表输出。

 

测试代码

 

4-9行都是为实例化HtmlHelper做准备的。

四、参考

《Professional ASP.NET MVC 1.0》

《ProASP.NET MVCFramework》

http://msdn.microsoft.com/en-us/magazine/dd942838.aspx

http://www.henrycordes.nl/post/2008/02/MVC-Framework-and-Unit-Test.aspx

http://srtsolutions.com/blogs/patricksteele/archive/2009/08/23/asp-net-mvc-mvc-contrib-unit-testing.aspx

http://weblogs.asp.net/leftslipper/archive/2008/04/13/mvc-unit-testing-controller-actions-that-use-tempdata.aspx

 

 

我的ASP.NET MVC实践系列

ASP.NET MVC实践系列1-UrlRouting

ASP.NET MVC实践系列2-简单应用

ASP.NET MVC实践系列3-服务器端数据验证

ASP.NET MVC实践系列4-Ajax应用

ASP.NET MVC实践系列5-结合JQuery

ASP.NET MVC实践系列6-Grid实现(上)

ASP.NET MVC实践系列7-Grid实现(下-利用Contrib实现)

ASP.NET MVC实践系列8-对查询后分页处理的解决方案

ASP.NET MVC实践系列9-filter原理与实践

其他:

在ASP.NET MVC中对表进行通用的增删改

[SEO]被搜索引擎省略了相似内容的条目该怎么办?

mikel阅读(1017)

转载:http://www.SEOwindows.com/SEOjq/200908/135.html

我们常常在GOOGLE或百度中用site指令的时候,会发现在结果最底部会出现“……我们省略了一些内容相似的条目,点击这里可以看到所有搜索结果”。

为什么会出现这种情况呢,最大可能就是被隐藏网页的相似度太高。

之前GOOGLE存在“补充材料”的时候,相似页面就很容易被Google贴上“补充材料”的标签。“补充材料”页的产生还有其他方面的因素,例如描述等。只不过,相似页面也是因素之一。

相似页面的优化,在SEO优化的工作当中,也是一个需要注意的细节。相似页面的清理和优化,可能主要涉及到网页设计人员。相似页面的产生,主要是因为这类页面的主体内容比较少,一些比较常规的辅助内容比较多。从而形成相似页面,这类页面在搜索引擎看来,价值性不高。

相似页面在网站整体的网页结构当中,可能是处在网页价值的末端。就是不太重要的网页,也很难获得搜索引擎的排名。

相似页面的形成

在每个网页中,正文内容必须在网页全部内容当中,占据比较重要或者比较大的比例。一般来说,正文在整张网页当中,所占比例只有20%-30%的时候,那很容易就形成一张相似页面。

主体内容在网页中的重要性

网页的正文就是网页的核心内容,网站管理者不应该为了更新网站或者方便,随便的写几句话就作为网站的原创内容来更新到网站。

网页的正文内容,文字不应该少于500字。字数太少,搜索引擎分析出网页的主题。分析不出网页主题,也就不利于网页的搜索引擎排名

相似页面对网站的影响

相似页面过多的话,会稀释网站质量,包括权重、PR、链接等。从而影响到网站整体在搜索引擎上的表现,例如长尾关键词的排名表现的不理想等。比较严重的惩罚是认为网站管理员有SEOSPAM行为,对此类网页给予不收录或者降权等。

如何优化相似页面:

1.防止正文内容过少,这是最好防止产生相似页面的技巧之一;

2.让搜索引擎的蜘蛛优先抓到正文;

3.减少网页中不必要的内容结构。

网站内部优化其实就是把不必要的东西去除或者改善不好的内容。在网站优化中,应该尽量避免出现过多的相似页面。大家日常的更新网站内容的时候应该注意内容篇幅,看看正文是否能够说明页面主题。

[SEO]反向链接的四大原则

mikel阅读(873)

转载:http://www.joyinweb.cn/html/baidu/2009/0922/826.html
反向链接是百度优化里常提到的说法,是SEO的第二要素,大多非专业人士可能不太熟悉,反向链接的一些指标也反应网站的健康状况,下面详细认识一下反向链接。
       一、反向链接的定义

      反向链接英文是:BackLinks,或Back-Links,又称为导入链接(incominglinks)。反向链接其实就是在目标文档内部进行声 明。换言之,常规链接在文档A中标明“指向文档B”,而反向链接则在文档B中要求“使文档A指向我”。反向链接是SEO的第二要素,重要性毋庸置疑。网络 上流传很多增加反向链接的10种方法、66种方法、101种方法,更有很多群建、群发的“黑帽”软件在流传,这里不做过多讨论。

    二、反向链接的原则

    1、时间原则

    2008新版seo方程式SEO=∫Clock=∫C1+L2+K3+O4,之所以采用高等数学里积分的概念,是认为seo的时间原则是非常重要的,特别是对于反向链接的建设,尤为重要。

    增加反向链接是一个长期的积累过程,要循序渐进、一步一步来;如果在短时间内迅速增加了超乎寻常的反向链接数,很容易遭到搜索引擎的特别处理(沙盒效应),seo效果适得其反,自然无法获得好的搜索排名。

    2、数量原则

    在遵循时间原则的基础上,反向链接数量自然多多益善。正所谓“广种薄收”,“不积小流,无以成江海”,茫茫网海,一分耕耘一分收获。

    3、质量原则

      网站长久持续获得好的排名,反向链接的质量比数量更为重要。何谓高质量的反向链接?链接导入页面高Pr值和相关性决定了反向链接的质量。比如,你的网站是 seo相关的主题,那么来源于seo排名前10位的网站的导入链接一定是高质量的;来源于一篇seo相关文章的导入链接也一定是高质量的。但是,高质量的 反向链接是可遇不可求的,虽然一个高质量的反向链接抵得上几十个甚至上百个垃圾反向链接,但是在无法获得高质量反向链接的情况下,那就遵循数量原则。

    4、位置原则

    其实位置原则是质量原则的一个补充,因为容易忽视且重要性不亚于数量和质量原则,所以特别需要重视。所谓位置,指的是反向链接在导入链接页面的具体位置。 搜索引擎抓取页面的时候会给不同区域的内容给与不同的权重,一般上、左区域权重高、下(尾)权重低。因此,反向链接出现在导入页面不同的位置会有不同的投 票分数,建议:

    (1)如果有可能,那就让反向链接出现在导入页面的头部

    (2)如果有可能,那就让反向链接出现在导入页面的左侧

    (3)上述方法都不可能,那就让你的反向链接出现在内容区域的前面,相关性高的内容区域靠前的反向链接对搜索引擎排名极为有力!因此,写软文的特别注意,在文章开始的部分尽量加入你需要加入的“文字链”。

    (4)网页底部的友情链接是最没有价值的垃圾链接,但有总比没有强(数量原则)。
   
    以上介绍了反向链接的四大原则。链接的合理与丰富是第二位的要素,合理有效的内部链接与丰富的外部链接同等重要,而外部链接中高度相关性高Pr值页面尤为重要。