针对Asp.net MVC SEO的几点建议
1. 引言
SEO 即搜索引擎优化,很多web开发人员本应该熟悉,至少需要了解的一个知识点。像百度、必应等搜索引擎其实一直都在进化。但是有些优化的技巧可能在短时间内不变。
今天就给大家介绍几个专门针对Asp.net MVC网站的SEO技巧, 当然有些技巧也通用于其他website.
2. SEO工具
首先介绍下一个 SEO 的一个小工具(SEO Toolkit),这个工具有点类似于一些分析exe程序性能的工具。但是不同的是它主要针对网站分析出哪些页面需要做SEO优化。
如果你已经有一个网站上线了,用这个小工具测试,相信可以找出一些可以优化的地方。该工具是安装到IIS 7.x 里面的,确保你的主机已经安装了IIS,安装完该工具后,可以在IIS Manager上看到

点击进去 就可以使用该工具,它包含了网站SEO分析、Sitemap 生成和Robots相关。
这里我们主要使用第一个

可以看到它找出了不少可以SEO优化地方,比如 <meta name=description/> ,<h1/> 等等。每一个能优化的地方该工具都给出了详细的介绍和如何实现优化。
3. 优化技巧
1) 确保网站的所有链接都是有效的,这个不用多说。
2) 确保每一个页面都有一个独一无二的title,对于Asp.net mvc 来说把 <title>@ViewBag.Title</title> 放到_layout.cshtml head 中 ,然后在每个页面的对应的Action 中设置 ViewBag.Title 即可。这个title 表示了当前页面的主题。
3) 确保每个页面只有一个 <h1> 这里有些页面出于设计的原因不想影响网页美观,就可能不想要放置<h1>。如何解决这样的问题呢?
可以设置css 把<h1> 移出网页范围外,也可以将<h1> 文本的颜色调成背景色, 或者直接添加hidden 类隐藏<h1>, 虽然<h1> 被隐藏了但是还是能被搜索引擎抓取。
搜索引擎抓取的并不是render 之后的页面,而是整个Html 文档。相信不少网站就这么做的
4 ) 设置canonical, 这个优化技巧主要是为了解决由于网址形式不同内容相同而造成的内容重复问题,比如有三个Url
http://51zhang.net/Oxford/HowOld
http://51zhang.net/Oxford/HowOld?addcomments=true
http://51zhang.net/Oxford/HowOld?deletecomment=true
这三个地址形式不同,第一个才是希望呈现给搜索引擎的,那么我们就可以在其他两个页面的head中添加canonical
<link rel='canonical' href='http://51zhang.net/Oxford/HowOld' />
从功能上讲 canonical可以理解为301永久重定向的辅助功能。
5 ) 尽量少用Ajax实现的上一页,下一页列表。比如博客园的新闻列表:http://news.cnblogs.com/n/page/3/

如果采用Ajax在本页面实现翻页效果,对于爬虫而言其实是同一个Url。
6 ) 尽量给网站添加robots.txt 和sitemap.xml
robots.txt 指示爬虫哪些可以爬取 哪些不可以爬取。比如 博客园的http://www.cnbeta.com/robots.txt

Disallow 表示哪些路劲是不能爬取的。
sitemap.xml 代表了整个网站的地图 能够告诉爬虫网站具体有哪些页面, 如果页面数量少,手动生成一个不是什么大问题。当页面过多时,
这里给大家推荐一个 sitemap 生成工具 https://github.com/maartenba/MvcSiteMapProvider
7 ) 使用直接路由 RouteAttribute
默认创建的Asp.net MVC项目,可以有好几种方式访问主页
但是有些搜索引擎在处理这样的问题时就没那么明智了。当然可以使用canonical。如果是Asp.net mvc5 就可以直接通过RouteAttribute
做优化。
4. 总结
SEO优化的技巧肯定不止这些,比如专门针对 前段采用AngularJs 的优化方式。这样的技巧也只有在实践中掌握.
欢迎访问我的个人主页 51zhang.net 网站还在不断开发中…..
针对Asp.net MVC SEO的几点建议的更多相关文章
- 从一个针对ASP.NET MVC框架的Controller.Action的请求处理顺序来说整个请求过程。
下面引用的所有代码都来自ASP.NET MVC的源码,但是可能只选取每个方法的其中一部分. System.Web.Routing.UrlRoutingModule在管道事件中注册PostResolve ...
- 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC
一.[前言] (1)本文将用到IOC框架Unity,可参照<Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备>(2)本文的解决方案是基于前述<使用I ...
- AJAX跨域调用ASP.NET MVC或者WebAPI服务的解决方案
问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模板创建一个最简单的ASP.NET Web ...
- 使用ASP.NET MVC操作过滤器记录日志(转)
使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_Filte ...
- 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案
作者:陈希章 时间:2014-7-3 问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模 ...
- ASP.NET MVC 监控诊断、本地化和缓存
这篇博客主要是针对asp.net mvc项目的一些常用的东东做一个讲解,他们分别是监控诊断.本地化和缓存.虽然前两者跟asp.net mvc看上去好像是没什么关联. 但其实如果真正需要做asp.net ...
- 让ASP.NET MVC不使用jsonp也可以跨域访问
跨域问题仅仅发生在Javascript发起AJAX调用,或者Silverlight发起服务调用时,其根本原因是因为浏览器对于这两种请求,所给予的权限是较低的,通常只允许调用本域中的资源,除非目标服务器 ...
- [翻译] 使用ASP.NET MVC操作过滤器记录日志
[翻译] 使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_ ...
- ASP.NET MVC 2 验证
来源:http://www.cnblogs.com/jhxk/articles/2612885.html 只为把自己觉的好的存起来 对用户输入的验证以及强制业务规则/逻辑是大多数web应用的核心需求 ...
随机推荐
- 浅谈WEB跨域的实现(前端向)
同源策略/SOP(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等攻击(可以参考我的这篇文章). SOP要求 ...
- 再看Ajax
再回顾Ajax相关的内容,再次梳理学习还是很有必要的,尤其是实际的开发中,ajax更是必不可少,仔细学习以便避免不必要的错误. 文章导读: --1.使用XMLHttpRequest---------- ...
- 为什么使用Binder而不是其他IPC机制
本文搬运自:Advantages of using Binder for IPC in Android 使用Binder而不是其他(Semaphores , Message Queue, PIPES) ...
- 在VMWare中建立Hadoop虚拟集群的详细步骤(使用CentOS)
最近在学习Hadoop,于是想使用VMWare建立一个虚拟的集群环境.网上有很多参考资料,但参照其步骤进行设置时却还是遇到了不少问题,所以在这里详细写一下我的配置过程,以及其中遇到的问题及相应的解决方 ...
- ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB
您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中.你可能会问一个问题,如何指定它将连接到数据库? 实际上,确实没有指定要使用的数据库,Entity ...
- [ASP.NET MVC 小牛之路]13 - Helper Method
我们平时编程写一些辅助类的时候习惯用“XxxHelper”来命名.同样,在 MVC 中用于生成 Html 元素的辅助类是 System.Web.Mvc 命名空间下的 HtmlHelper,习惯上我们把 ...
- 有关bootstrap之排版
1.标题 HTML中的所有标题标签,从<h1> 到 <h6> 均可用.另外,还提供了.h1 到.h6 class,为的是给inline属性的文本赋予标题的样式. 在标题内还可以 ...
- C语言-指针
C指针基础知识 C语言中,指针无疑是最令人头疼的.今天无事就来学学C语言的指针,在此留下点笔记,仅供个人参考. 首先要搞懂的是,指针是什么? 指针:是用来存放内存地址的变量. 不管是什么类型的指针,存 ...
- JAVA的静态变量、静态方法、静态类
静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. (1)Java静态对象和非静态对象有什么区别? 比对如下: 静态对象 ...
- Web APi之HttpClient注意事项以及建议(四)
前言 之前对于用SelfHost来手动实现Web API的宿主模式,似乎不是太深入,所以本篇文章我们一起来讨论关于利用HttpClient来访问Web API上的资源来进行探讨以及注意相关事项,希望此 ...
