页内SEO优化工具 WebSite Auditor 处理中文网页的方案

使用WebSite Auditor这个页内SEO优化工具分析中文页面时发现一个问题, 他将中文的句子看着是一个关键词了.这样他的中文页面作出的页内SEO优化分析报告就没有太多参考价值了.
针对这个问题想了两个解决方案:

1. 手工对中文页面做分词处理

将要分析的网站完整抓下来,手工对页面中的中文做中文分词后在传到一个测试用web服务器上,然后再通过Web SiteAuditor 进行优化分析,得到优化报告.
这种方案的优点: 操作简单,不需要额外的编程,只要耗费些时间手工处理就好
这种方案的缺点: 按照优化报告的建议修改完页面内容后,还需要再次抓取切分,比较麻烦费时间,如果页面多,那耗费的时间就不是一点了.

2. 做一个透明的http代理服务器

使用自定义的http代理服务器, 对代理服务器中获取的中文页面内容自动做中文分词处理,然后再返回给WebSite Auditor做处理.
这种方案的优点: 处理自动化,按照WebSite Auditor的SEO优化报告建议做好网页内容的修改后,可以立马再用WebSite Auditor 来对新页面做SEO优化分析.
这种方案的缺点: 有一定技术难度, 对http代理程序的编写有一定要求.

我为了一劳永逸的解决问题,使用了自定义http代理的方式进行了处理,处理后在 WebSite Auditor 中使用的效果还不错.

Popularity: 3% [?]

Related

WebSite Auditor 一个非常棒的页内SEO优化工具

最近关注页内SEO优化,在网上搜索尝试了几个SEO优化相关工具.

发现 WEBCEO 和 WebSite Auditor 可以做页内优化.

经过对比后,发现还是WebSite Auditor这个工具简单易用.

它只要简单的输入等待SEO优化的网站网址和等待SEO优化的关键词就可以:

1.以树状结构查看待优化网站中各个页面的Title, Meta Keywords, Meta Description, PageRank, 链接数量,链接价值, W3C代码验证情况等SEO优化相关信息.

2. 生成待优化网站整体SEO优化情况报告,包括网站在各个搜索引擎中的人气情况, 网站网页被Google, Yahoo!, Bing收录量情况,所有页面的PR值分布情况, 重复最多的标题Title, Meta Description等情况, 页面链接价值分布情况 等等整体SEO优化信息

3. 针对具体待SEO优化的页面, 方便查看页面中所有关键词的分布情况,以及关键词在页面的Title, Meta Keywords, Meta Description, Anchor Text, H1等页面元素上的情况

4. 对页面提供针对特定关键词的页内SEO优化建议, 主要涉及关键词的分布率, 突出程度, 密度等几个方面, 并给出一个优化率的参考数据.

5. 对通过在搜索引擎中使用关键词查询获得的Top 10页面的Title, Meta Descripion, Meta keywords 做查看,提供优化参考.

6. … 其他很多关于页面SEO优化相关的信息

7. 和其他软件相比有个好处,他提供了本地化资源文件的编辑处理,可以自己定做中文语言包达到汉化他的目的. 这个对使用中文的我们比较有吸引力,只要花费一些时间进行一些文字编辑就可以作出一个中文版的WebSite Auditor.

WebSite Auditor 主要分为 免费版, 专业版, 企业版 功能主要区别

免费版可以长期使用,不过不能保存文件, 还有部分优化建议看不到. 如果没银子可以尝试使用这个,就是每次运行都要重新输入待优化网站信息和关键词信息有点繁琐. 不过可以免费用还介意那么多干什么呢, ^_^

专业版可以保存文件,同时也可以在优化报告中看到所有的优化建议, 售价也只要$99.x, 折合人民币600多, 国内随便找哪个做SEO优化服务的公司做一次SEO优化服务都超过这个价钱把, 自己买一套还可以随时查看按照建议修改后的页面变化情况. 偶嫌使用免费版每次打开软件都要重新输入一次待优化数据信息麻烦就购买了一套. 我也要购买一套

企业版除了专业版的功能,还可以自动将生成的报告用email或ftp方式发送出去.这一点对做SEO优化服务的同学很有用,输入待优化的关键词信息后就可以直接将生成优化建议报告发送出去,省时省力. 不过软件售价也要高了很多.要$2xx 我要购买一套企业版

Popularity: 2% [?]

Related

使用MySQL Connector C++的PreparedStatement更新数据碰到类型异常

使用MySQL Connector C++ 的preparedStatement,在更新数据时,碰到异常

  1.  pstmt = con->prepareStatement("INSERT INTO logs(day, time, uid, vid, cid, cv, did, res) VALUES (?,?, ?,?, ?,?, ?,?)");
  2.  pstmt->setInt(1, day);
  3.  pstmt->setInt(2, time);
  4.             //…..
  5.         pstmt->setInt(8, res);
  6.  
  7.  pstmt->executeUpdate();

执行executeUpdate时碰到异常: Using unsupported buffer type: 0 (parameter: 1)

不知道怎么回事,使用google搜索了一会,没有找到解决方法。
没有办法,将相关代码替换使用Statement的execute方法处理,执行ok

Popularity: 21% [?]

Related

一个C++编译的问题折腾了我好久

被一个C++编译的问题折腾了好久,
在程序源码中修改了一下基类.h文件函数的声明方式,而没有改动对应的cpp源码文件,结果编译链接的时候还是使用上次cpp编译的结果,导致虽然编译过程没有错误提示出来,但是链接出的代码行为不正常。

为了发现这个问题还反复复查子类的代码和debug,浪费了很多不必要的时间,以后一定要养成修改了代码后make clean的习惯,虽然这样再次编译的时候比较费时间,但是至少能够保障编译出的是自己修改后希望的结果,而不会由于忘记某事某步骤得到不一样的结果而让费大量时间去做无用功调试。

Popularity: 18% [?]

Random Posts

使用fastcgi++编写fastcgi应用初探(一)

fastcgi++作为一个完全C++编写的fastcgi应用开发包,封装了很多功能,比如参数提取,session,mysql数据库连接管理等最大限度的简化cgi编程。
编写一个简单的helloworld的fastcgi应用。

  1. #include <fstream>
  2. #include <boost/date_time/posix_time/posix_time.hpp>
  3.  
  4. #include <fastcgi++/request.hpp>
  5. #include <fastcgi++/manager.hpp>
  6.  
  7. void error_log(const char* msg)
  8. {
  9.         using namespace std;
  10.         using namespace boost;
  11.         static ofstream error;
  12.         if(!error.is_open())
  13.         {
  14.                 error.open("/tmp/errlog", ios_base::out | ios_base::app);
  15.                 error.imbue(locale(error.getloc(), new posix_time::time_facet()));
  16.         }
  17.  
  18.         error << '[' << posix_time::second_clock::local_time() << "] " << msg << endl;
  19. }
  20.  
  21. class Helloworld: public Fastcgipp::Request<char> {
  22. public:
  23.         bool response()
  24.         {
  25.                 out << "<html><body>";
  26.                 out << "Hello world!";
  27.                 out << "</body></html>";
  28.                 return true;
  29.         }  
  30. }
  31. main(){
  32.         try
  33.         {
  34.                 Fastcgipp::Manager<Helloworld> fcgi;
  35.                 fcgi.handler();
  36.         }
  37.         catch(std::exception& e)
  38.         {
  39.                 error_log(e.what());
  40.         }
  41. }

可以看到基本的只要从 Fastcgipp::Request 派生一个类,实现其中的 bool response() 函数就可以完成一个fastcgi 应用。

Popularity: 25% [?]

Related

Linux每进程线程数问题处理

公司的一台服务器升级,原先运行正常的一个服务经常会跳出,于是予以分析解决。
该服务是一个tcp的服务端程序,被动接收客户端连接处理数据,升级后当客户端连接到一定量后程序会自动跳出。

使用netstat查看各个状态的数量
netstat -na |awk ‘{print $6}’|sort |uniq -c |sort -nr
发现很多的CLOSE_WAIT,并且还在不断增加中。
觉得可能是CLOSE_WAIT得不到释放,占用很多资源,
于是修改sysctl.conf中关于tcp连接的连接时间等设置,结果问题依旧。

怀疑收到攻击,使用
netstat -na |grep CLOSE_WAIT|awk ‘{print $5}’|awk -F”:” ‘{print $1}’|sort |uniq -c |sort -nr |wc -l 查看连接过来的地址,发现都是地址来源都是正常的

首先检查
使用 ps -fe |grep programname 查看获得进程的pid
再使用 ps -Lf pid 查看对应进程下的线程数,发现数值为303,远小于实际应该的数量。于是初步判断是由于线程数不够造成的原因。查找资料发现可以通过设置 ulimit -s 来增加每进程线程数。

每进程可用线程数 = VIRT上限/stack size
其中 VIRT 上限: 32位x86 = 3G 64位x64=64G
statck size 默认是 10240 因此在默认情况下
32位系统上单进程最多可以创建300个线程,
64系统在内存充足的情况下最多可以创建 6400 个线程。

在机器硬件固定的情况下,可以通过 ulimit -s 降低stack size 的设置值来获得更多的每进程线程数。

Popularity: 23% [?]

Related

Delphi6总是提示要注册激活问题解决

好一段时间没有用 Delphi6了,今天在打开一个工程的时候竟然反复提示要注册。

就算是用Kg提供的SN与激活方法都失败了,激活步骤总是先提示注册成功,然后再提示注册失败,郁闷。。。

后来网上找到一篇:
找到注册表:
[HKEY_CURRENT_USER\Software\Borland\Delphi\6.0]

删除下面的 “LM” 键

照做后,再打开 Delphi6,果然全好了,继续使用Delphi6中…

Popularity: 24% [?]

Related

Nginx的防盗链和限速处理

防盗链处理

1 简单的通过referer判断

location ~ .*\.(gif|jpg|jpeg|png|bmp|wma|mp3|swf)$ {
      valid_referers none blocked server_names *.163.com 163.com baidu.com;
      if ($invalid_referer) {return 403;}
    expires      30d;
}

2 NginxHttpAccessKeyModule 插件

这个需要安装额外的模块,下载模块源码,然后按照说明文档,将下载来的源码中”$HTTP_ACCESSKEY_MODULE” 替换成 “ngx_http_accesskey_module“,再

  1. ./configure –add-module=path/to/nginx-accesskey

完了以后再重新编译一次nginx,然后就可以在配置文件中使了。

location /download {
  accesskey             on;
  accesskey_hashmethod  md5;
  accesskey_arg         "key";
  accesskey_signature   "mypass$remote_addr";
}

这样一个下载的文件就需要 http://example.com/download/file.zip?key=09093abeac094 这样的形式进行下载
其中 key的值为 mypass和下载客户端ip 进行md5运算获得。比如在 php 中可以向如下方式输出针对客户ip的下载链接地址

  1. <?
  2. $ipkeyvalue = md5("mypass".$_SERVER['REMOTE_ADDR']);
  3. $out_keyfile_link="<a href=http://example.com/download/testfile.rar?key=".$ipkeyvalue.">防盗链文件下载</a><br />";
  4. echo $out_keyfile_link;
  5. ?>

这样当一个用户将访问地址拷贝给别人时,因为访问ip不同,就造成 md5(”mypass”.ipaddr) 值不同,达到防盗链目的。

限速处理

限速使用 limit_zone, limit_conn 以及 limit_rate 进行配置
首先在 http 段配置一个 limit_zone,然后在需要的地方使用 limit_conn 和 limit_rate 进行限速设置,如下一个简单的例子

http {
  limit_zone   one  $binary_remote_addr  10m;
  server {
    location /files/ {
      limit_conn   one  1;
      limit_rate 20k;
    }
  }
}

说明:
limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个名叫one的10m大小的容器,这个名字会在后面的limit_conn中使用。

limit_conn one 1;
限制在one中记录状态的每个IP只能发起一个并发连接。

limit_rate 20k;
对每个连接限速20k. 注意这里是对连接限速,而不是对IP限速。如果一个IP允许三个并发连接,那么这个IP就是限速为limit_rate×3,在设置的时候要根据自己的需要做设置调整,要不然会达不到自己希望的目的。

Popularity: 28% [?]

Random Posts

编译gdlib库碰到undefined reference to `png_check_sig’问题解决

采用源码方式编译php,需要gd库,同样采用源码编译,在编译过程中碰到 undefined reference to `png_check_sig’ 错误。
google了一下,发现由于使用的新的 libpng 1.4版本,去掉了png_check_sig函数,替换为了png_sig_check函数
,于是编辑gd库的 gd_png.c文件,将

  1. if (!png_check_sig (sig, 8)) { /* bad signature */
  2.   return NULL;
  3. }

修改为

  1. if (png_sig_cmp (sig, 0, 8)) { /* bad signature */
  2.   return NULL;
  3. }

再次编译通过

Popularity: 33% [?]

Related

源码安装Mysql提示No curses/termcap library found

使用源码方式安装Mysql5.0,提示No curses/termcap library found
google了一下,
下载一个ncurses-5.6.tar.gz安装,

  1. wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz
  2. tar zxvf ncurses-5.6.tar.gz
  3. cd ncurses-5.6
  4. ./configure –prefix=/usr –with-shared –without-debug
  5. make
  6. make install clean

网上还有一篇说在./configure 时添加 –with-named-curses-libs=/usr/lib/libncurses.so.5 解决,但是添加后虽然./configure通过,但是在make时失败
在这儿记录一下

Popularity: 39% [?]

Related

Next Page →