在博客添加与朋友更好交流的通道:del.icio.us 和在线阅读器订阅

受文章不用SEO取得成功的10个步骤的启发:

6、添加社会媒体应用服务
你可以增加一些类似del.icio.us或Stumple Upon的书签收藏服务。。。

在博客上添加了del.icio.us网摘的 link rolls (链接列表)、tagrolls(标签列表)和 daily blog posting(网摘每日博客提交) 和 在线阅读器订阅。

下面简单的说一下我使用这两个功能的步骤。

一、 del.icio.us

1、在del.icio.us上申请一个帐号,在您的浏览器中安装相应的插件,如:firefox的插件:del.icio.us/help/firefox/extension ,IE的插件:del.icio.us/help/ie/extension

2、link rolls和tagrolls的使用。

link rolls用来把您的网摘在网页上分享给大家。

登录您的帐户,在右上角的 settings中的link rolls进行相应的设置,拷贝相应的代码到您要显示网摘列表的网页。

这里有一个技巧,因为del.icio.us的服务可能拖慢您的网页,可以把这个代码写在一个单独的页面上,再在要显示的地方用<iframe>标签嵌入代码。我的代码如下:

<html>
<head>
<title>my del.icio.us</title>
<base target="_parent">
</head>

<body bgcolor="#FFFFFF">
<div style="font-size: 13px">
<script type="text/javascript" src="http://del.icio.us/feeds/js/learndiary?tags;count=15;title=my%20del.icio.us;icon;name;showadd" mce_src="http://del.icio.us/feeds/js/learndiary?tags;count=15;title=my%20del.icio.us;icon;name;showadd"></script>
<noscript><a href="http://del.icio.us/learndiary" mce_href="http://del.icio.us/learndiary">my del.icio.us</a></noscript>
</div>
</body>

</html>

其中的<base target="_parent">一定要加上,不然窗口就在<iframe>框架内打开,原因参见:CodeAve.com/HTML - Base Target。改成target="_blank"新开一个窗口。

然后在需要显示link rolls的地方用<iframe>调用上面的页面:

<IFRAME border="0" marginWidth="0" marginHeight="0" src="/my-includes/delicious.htm" frameBorder="0" width="630" height="400" scrolling="no" ></IFRAME>  

tagrolls是把您在delicious中网摘的标签列在网页,用法类似link rolls。我把这个标签列表放在页面标签云中,跟我的博客上的标签云放在一起。

3、daily blog posting的使用。

daily blog posting是把您的网摘每日自动提交到您的博客上成为一篇日记。支持的博客程序: Movable Type, Typepad, WordPress等等。我的是wordpress。

在settings的daily blog posting中add a new thingy,参数含义如下:(摘改自:在blogbus中如何使用delicious的“daily blog posting”功能?

job_name填写你blog名字就可以了,实际上随便填;
out_name;out_pass是你blog的用户名和密码;
out_url填写你在bus的blog的xmlrpc地址,类似于http://www.learndiary.com/xmlrpc.php;
out_time是GMT时间,GMT时间在中国大陆因为是8时区,所以我们的本地时间减去8就是了,如我填的是20,意思是本地时间早上4点提交;
out_blog_id如果你在delicious只输出一个blog的话填1,空着也可以;
out_cat_id可以不填,是你输出的分类编号;然后就等着del.icio.us每天设定的时间朝您的博客自动发送您的网摘列表吧。不过,从已经发过的几篇自动提交的日记来看,基本上是4:20左右发过来的,从del.icio.us中daily blog posting的log记录来看,应该是del.icio.us系统延迟的原因。使用的示例:links for 2007-09-01

二、在线阅读器订阅:
可以供对我的博客感兴趣的朋友用各种RSS在线阅读器订阅。
我试验了一下Feedburner,发现服务不太稳定,原因可以参考一下月光博客的这篇发布RSS Feeds的方法再思考,但大多数朋友好像都使用的这个,就保留了Feedburner的feed服务。哦,如果您的feedburner出现乱码,参看一下这篇文章:FeedBurner乱码解决方法

不知怎么一回事,用wordpress自带的feed地址在有的在线阅读器也有些工作不正常。

最后,我试用了Feedsky,感觉不错,它在一个feed地址的页面集成了常用在线阅读器的订阅,并且可以用这个地址作为本地RSS阅读器的订阅地址。见下截图:

Feedsky服务截图

于是,我的订阅服务是几种都摆在侧边栏底部,如下:

订阅

其中后面两条是订阅我的del.icio.us的网摘和网摘标签的。在您的del.icio.us页面有相应的链接。前者就在您的bookmarks的底部,后者忘了地方。

垃圾评论太多了,Akismet插件也应接不暇

spam太多了,Akismet插件也应接不暇。

刚开始使用Akismet插件的时候,我还庆幸“使用后感觉不错,今天就截获10多条垃圾评论,无一错杀和漏网 🙂”,可现在,我对Akismet能否挺得住表示怀疑了。

除开我自己的评论,有效的评论率可能1~2%,绝不部分都是老外发的spam,每天都有10条左右,也许是Akismet网站太忙了(好像是全世界使用这个插件的每条评论都要先到它的网站报到接受检查),有些明显的spam(像包括几十个链接这种)也被漏报了。

不过,我设置的是评论用户的第一条评论都要检查一下,以后同一用户的评论就不必检查了。所以,没有一条丑陋的spam得以在我的公开页面漏面。

这个wordpress博客使用有1个月了吧,大概就有200个spam。除开我自己的和我邀请的,真正是来访网友的评论也就大概3条。

还有一次,Akismet把我登录后写的一条带一个链接的评论给当成spam挡住了。

像我这样的博客尚且如此多的垃圾评论,那些稍微有点名的博客一天的垃圾评论不知道又是多少呢 🙂 ,我在当心Akismet能否挺得住全世界这么多wordpress博客中的垃圾评论的轰炸 🙁

那种用发垃圾评论宣传网站的方式好像早已经列入搜索引擎打击的对象,Google黑板报明确的给出了答案:远离自动产生的链接。这篇文章也在google中国官方的谷歌中文网站管理员博客于8/15/2007 08:20:00 上午由博客主人: “谷海一粟”再次重复,相当于这个问题在google中国两大官方网站都加以强调了。难道,他们就没有真正的评估一下得失吗?

诚然,你假设发了10000条垃圾评论,得以公开漏面的假设1000条,而用户点击你的链接恐怕就少得可怜,因为大家都已经有免疫力了;就拿合法的广告来说,一般的点击率也就1%(我的google广告更低),你垃圾评论的点击率估计也就0.1%,也就是发了10000条垃圾评论,最后只有1个链接到达你的站。而你公开漏面的1000条垃圾评论,搜索引擎就不会惩罚你的这些链接吗?据我的经验,一个网站的流量大部分来自搜索引擎。而这些,你算过损失吗?而且,不包括你发垃圾评论的电费、网费、电脑磨损费等等。还有,不包括你和你网站的社会形象问题。

还有,像我这样使用wordpress之类的系统,因为这类系统大多在评论的链接中自动加入了类似“rel="nofollow"”之类的标记,这是告诉搜索引擎遇到这个超级链接就停止,不要把它当作是一个有效的投票,发了也白发。

建议这方面的SEO专家做一个“关于垃圾评论损益的可行性研究报告”,针对各种网站(包括只想赚钱的垃圾站、想N年赚钱的站、公益站、门户站、产品站、博客、论坛等等)的。我想,把这个报告弄好,发表出来,不知道应该有多红 🙂

另外,建议世界主要的搜索引擎联合开发一个像Akismet这类的巨型spam链接数据库并开发相应的功能调用接口,各种网站管理系统(cms、bbs、blog等)都可以开发挂接到这个数据库的插件,让这类垃圾链接失去存在的空间了。

ps: 我是不是对SEO感兴趣了呢 ❓

在wordpress中输入表情符号

知道wordpress(我的是2.2.1版)可以不用插件输入表情符号并在页面中显示相应的表情图片。但是,我试了几次发现不行。昨天,无意中在输入的表情符号前空了一个空格就可以显示表情图片了。

使用这个功能需要保证“网站管理->设置->录入”中的“格式: 自动将 🙂 和 😛 等表情符号转换成图片显示”的选择框勾选上。

完整的wordpress表情符号用法见:Using Smilies

写法如下(注:使用时请将全角标点符号换成半角标点符号,如有中括号就将其去掉,一个表情有可能有1~3种写法):
smile :) :-) :smile: biggrin :D :-D :grin: sad :( :-( :sad:
surprised :o :-o :eek: eek [8O] [8-O] :shock: confused :? :-? :???:
cool [8)] [8-)] :cool: mad :x :-x :mad: razz :P :-P :razz:
neutral :| :-| :neutral: wink ;) ;-) :wink: lol :lol: redface :oops:
cry :cry: evil :evil: twisted :twisted: rolleyes :roll: exclaim :!: question :?:
idea :idea: arrow :arrow: mrgreen :mrgreen:

与上依次对应的效果如下:
smile 🙂 🙂 🙂 biggrin 😀 😀 😀 sad 🙁 🙁 🙁
surprised 😮 😮 😮 eek 😯 😯 😯 confused 😕 😕 😕
cool 8) 😎 😎 mad 😡 😡 😡 razz 😛 😛 😛
neutral 😐 😐 😐 wink 😉 😉 😉 lol 😆 redface 😳
cry 😥 evil 👿 twisted 😈 rolleyes 🙄 exclaim ❗ question ❓
idea 💡 arrow ➡ mrgreen :mrgreen:

而下面的文章是转改自Email中的“笑脸符号”:-),可以看出这两套表情符号是不同的。(注:使用时请去掉前面的[

作者: 文章来源: 2002-2-28 13:35:36

写电子邮件给朋友时,要怎样才能让他们看到你的“笑容”呢?使用“笑脸符号”吧!在公事信件中通常避免使用表情符号。但是在朋友往来的信件中,它们可是相当普遍的!它们可利用电脑键盘上的特殊符号及标志表现。

  以下是一些可以用来表达心情的表情符号。

[:-) 🙂 微笑

[;-) 😉 眨眼笑

[:-‖ :-‖ 生气

[:-( 🙁 难过

[:'-( :'-( 哭

[:-)) :-)) 非常高兴

[:-D 😀 咧嘴笑

[:-* :-* 亲一下

[:-0 :-0 哇!或是我很意外

[:-P 😛 伸舌头

[:-/ :-/ 困惑的

[=:O =:O 受到惊吓(头发都直起来了)

[:-'| :-'| 我感冒了

[>:-< >:-< 非常生气

wordpress+盘古,不错的blog系统

使用wordpress+盘古的blog系统可能有半月了吧。总的来说,感觉二者的组合是好用的blog系统,不错的blog系统。

wordpress的blog程序的强大我最有感触的几点是:
1)、模板、插件应有尽有;
2)、功能完善,定制容易,如果自己不满意某个地方,您尽可以在它的代码随意修改;
3)、权限设置、私人日记、受密码保护日记的功能很贴合我的需要;

盘古的虚拟空间我最有感触的几点是:
1)、功能完备,使用方便,所有的网站管理功能(域名绑定、数据库建立和管理、文件管理、备份、访问统计等等)基本上都可以在他们的cPanel控制面板动动鼠标就搞定;

2)、售后服务比较迅速,我提在他们的在线问答上的问题能及时响应;

3)、提供的.htaccess支持使我的新老URL都能顺利访问,并且有利于搜索引擎优化

我还感到比较满意的一点是:二者在我的linux控制台下基本上都能方便的使用,我原来还想,wordpress的功能这么完备,在文字模式的linux控制台下不知能不能写日记啊?可现在,我目前发现除了文件的上传功能我在linux控制台下的w3m浏览器不支持IFRAME而不能使用外,其它所有功能都工作得很棒。呵呵,这篇日记就是我在linux控制台下写的。而盘古的cPanel本来就是工作在他们的linux下的,在我的linux控制台下使用起来当然是流畅极了:)。一句广告语:wordpress + 盘古,powered by linux,it's OK!

当然,世间之事怎么能完美?!在半月内,我也碰到过两三次网站短时间不能访问的情况,但这是正常之极,我也不以为怪。况且,盘古的系统也很便宜,100块一年的,像我这样的博客足足有余了。当然,如果您的博客红得像“老徐”的博客,那就另当别论了:)

一句话:wordpress+盘古,不错的blog系统!

我的wordpress使用的主题、插件及针对浏览体验和SEO方面的一些修改

我使用的是wordpress2.2.1带中文包版本,由于对下载来的wordpress及其模板、插件都作了一些修改。特地把这些变动记录一下备忘和供朋友参考。

1、模板:
选来选去,用了http://wordpresstheme.cn/category/chinese/上的blogool.org WordPress Theme,原效果图如下:
blogool.org WordPress Theme
下载来的模板(littlebat于2009年8月16日后注:我发现今天不能打开这个主题的发布网址了,另一个有效的网址是:blogool.org WordPress Theme Released),在header.php和sidebar.php去掉了blogool.org自己专有的东西,把logo的位置变了,弄不懂它里面的logo是怎么链接的,删掉了原来的logo链接,在后面加了logo:

日记

另外在右上角加了主页和标签的链接。

2、使用的插件
1)、中文 WordPress 工具箱1.2
作者的说明如下:

用来解决官方 WordPress 没有照顾到的中文相关问题。使用这个插件,你可以显示随机文章,最新留言(最新引用),留言最多文章,发表评论最多的网友,还有真正的文章摘要,等等,真正截断,没有乱码。 作者:桑葚

我使用了:最新日记,最新评论,随机日记的功能;

2)、Jiehoo Bookmark1.0
主要是用来把日记加到一些网摘上;

3)、Simple Tagging1.6.8,可从这里下载。
一个强大的tag(标签)插件,我使用了其中的:标签,相关日记,标签云(tag cloud)的功能,和最常使用标签(修改了代码)的功能。
实际上,我先用的是Jerome’s Keywords,这个插件在WordPress 2.1x以后,每次有人评论,该贴原来设定的tag 就被清空。我的2.2.1也是如此,就算是垃圾评论来了好像也会清空被评论日记的tag。现在用simple tagging插件,可导入Jerome’s Keywords的tag。
使用这个插件要注意,在实现tag cloud的时候,如果要把您以前所有的tag都包括进来,一定要把“Maximum number of days to be considered:”(最大过去天数)改成您的最早日记以前,默认是包括1年内(365天)的日记。我的改成了2000

因为我的日记的tag使用次数差距大,默认的设置显示不明显。作了下列修改:
(1)、Cloud tag separator(s):设置成了空格;
(2)、Tag count scaling maximum:设置成了300,据使用经验看,大概是数字越大,不同使用次数的tag的颜色和字体大小层次分得越清楚;
(3)、Most popular font size:设置成了28,使使用次数多的tag的字体更大一些。
实现tag cloud需要把下载来的文件解开后的目录wordpress 2.2 template files for default theme (kubrick)中的pagetemplate.tagcloud.php拷到您使用的theme的目录下。创建一个以它为模板的页面,这个页面就是您的tag cloud页面了。
另外把上面相同目录下的style.css中
/**
* Style for Simple Tagging Plugin
* http://sw-guide.de/wordpress/wordpress-plugins/simple-tagging-plugin/
*/ 后有关这个插件的部分拷到您的style.css后面。
为了适应我的tag cloud需要,对这部分的下面代码作了一点改动:

ul#tagcloud { padding:0; margin:0; text-align:center; list-style:none; }

改成下面这样:

l#tagcloud { padding:0; margin:10px; text-align:left; line-height: 300%;
list-style:none; }

使标签向左靠齐,与四周留点空隙和增大行距。

(4)、实现最常使用标签功能
我发现在simple tagging插件中没有像Jerome’s Keywords那样有专门函数来实现这个功能,于是添加了一个函数,调用实现tag cloud的函数来在侧边栏实现了这个功能。
方法如下:
在“插件编辑器”中打开“simple-tagging/simpletagging.php ”,添加如下函数:
注意:以下请把全角的“<”和“>”换成相应的英文符号!

function STP_TopTags($linkformat=null, $tagseparator=null, $include_cats=null, $sort_order=null, $display_max=null, $display_min=null, $scale_max=null, $scale_min=null, $notagstext=null, $max_color=null, $min_color=null, $max_size=null, $min_size=null, $unit=null, $limit_days=null, $limit_cat=null, $exclude_cat=null) {
echo STP_GetTagcloud($linkformat, '<br>', $include_cats, 'desc', 10, $display_min, 0, $scale_min, $notagstext, $max_color, $min_color, $max_size, $min_size, $unit, 2000, $limit_cat, $exclude_cat);
}

然后,在您要使用的模板上加上<?php STP_GetTagcloud() ; ?>就行了。
上面在调用生成tag cloud的函数基础上指定了一些参数(即上面没有$的项),从左到右意思如下:

'<br>'-标签的分隔;
'desc'-标签按使用次数从多到少排列;
10-开出前10个;
0-关闭按次数变颜色和字体的功能;
2000-包括2000天前以内的tag。

3、SEO(搜索引擎优化)方面作了一些修改,但主要的宗旨还是针对浏览者体验上作了一点优化。
1)、关于页面的title属性的修改:
网上说title属性做成“文章名称 - 文章分类 - 网站名称”类似的比较好,但wordpress自有的是相反的顺序。
网上有专门的插件,我的方法是直接修改代码如下:

(1)、修改文件/wp-includes/general-template.php,主要是根据wordpress内部工作时调用的查询参数来判断,如tag是"/?tag=java",我就可以确定tag的title,以此类推。要说的是,这种硬编码的方法不好,但是自己用比较方便。

function wp_title($sep = '-', $display = true) {
global $wpdb, $wp_locale, $wp_query;

$cat = get_query_var('cat');
$p = get_query_var('p');
$name = get_query_var('name');
$category_name = get_query_var('category_name');
$author = get_query_var('author');
$author_name = get_query_var('author_name');
$m = get_query_var('m');
$year = get_query_var('year');
$monthnum = get_query_var('monthnum');
$day = get_query_var('day');
$tag = get_query_var('tag'); //添加标签的标题
$title = '';

// If there's a tag,添加标签的标题
if ( !empty($tag) ) {
$title = $tag;
}

// If there's a category
if ( !empty($cat) ) {
// category exclusion
if ( !stristr($cat,'-') )
$title = apply_filters('single_cat_title', get_the_category_by_ID($cat));
} elseif ( !empty($category_name) ) {
if ( stristr($category_name,'/') ) {
$category_name = explode('/',$category_name);
if ( $category_name[count($category_name)-1] )
$category_name = $category_name[count($category_name)-1]; // no trailing slash
else
$category_name = $category_name[count($category_name)-2]; // there was a trailling slash
}
$title = $wpdb->get_var("SELECT cat_name FROM $wpdb->categories WHERE category_nicename = '$category_name'");
$title = apply_filters('single_cat_title', $title);
}

// If there's an author
if ( !empty($author) ) {
$title = get_userdata($author);
$title = $title->display_name;
}
if ( !empty($author_name) ) {
// We do a direct query here because we don't cache by nicename.
$title = $wpdb->get_var("SELECT display_name FROM $wpdb->users WHERE user_nicename = '$author_name'");
}

// If there's a month
if ( !empty($m) ) {
$my_year = substr($m, 0, 4);
$my_month = $wp_locale->get_month(substr($m, 4, 2));
$my_day = intval(substr($m, 6, 2));
//$title = "$my_year" . ($my_month ? "$sep $my_month" : "") . ($my_day ? "$sep $my_day" : "");
$title = ($my_day ? "$sep $my_day" : "") . ($my_month ? "$sep $my_month" : "") . "$my_year";//改成了:日,月,年的顺序
}

if ( !empty($year) ) {
$title = $year;
//if ( !empty($monthnum) )
// $title .= " $sep " . $wp_locale->get_month($monthnum);
//if ( !empty($day) )
// $title .= " $sep " . zeroise($day, 2);
//如上,改变日期顺序为: 日,月,年
if ( !empty($monthnum) )
$title = $wp_locale->get_month($monthnum) . " $sep " . $title;
if ( !empty($day) )
$title = zeroise($day, 2) . " $sep " . $title;
}

//If there is a post
//if ( is_single() || is_page() ) {
// $post = $wp_query->get_queried_object();
// $title = strip_tags( apply_filters( 'single_post_title', $post->post_title ) );
//}
//日记和页面的标题分开,并在后面加上区分
if ( is_single() ) {
$post = $wp_query->get_queried_object();
$title = strip_tags( apply_filters( 'single_post_title', $post->post_title ) ) . " $sep " . '日记';
}

if ( is_page() ) {
$post = $wp_query->get_queried_object();
$title = strip_tags( apply_filters( 'single_post_title', $post->post_title ) ) . " $sep " . '页面';
}

//为分类,作者,标签的标题添加区别
if( !empty($cat) || !empty($category_name) )
$title = $title . " $sep " . '分类';

if( !empty($author) || !empty($author_name) )
$title = $title . " $sep " . '作者';

if( !empty($tag) )
$title = $title . " $sep " . '标签';

//去掉标题前面的分隔符
//$prefix = '';
//if ( !empty($title) )
// $prefix = " $sep ";

//$title = $prefix . $title;

$title = apply_filters('wp_title', $title, $sep);

// Send it out
if ( $display )
echo $title;
else
return $title;
}

还有一个修改的地方是在您使用的模板中的header.php文件在相应位置作了下列的修改:
<title><?php if(!is_home()){ ?><?php wp_title(); ?> - <?php } ?><?php bloginfo('name'); ?></title>
最终的效果就是:

我的wordpress使用的主题、插件及针对浏览体验和SEO方面的一些修改 - 日记 - 学习日记
linux - 标签 - 学习日记
java - 分类 - 学习日记
littlebat - 作者 - 学习日记

2)、把主页和分类页、标签页等都只显示列表,不显示具体内容。
理由:我认为这些页面只起个信息的组织作用和导航作用,我的标题和分类、标签就反映了这篇文章的大概内容,查找使用方便,突出了日记页面的内容。
另外,关于右侧侧边栏的内容包含在每页会不会影响搜索引擎收录呢?我认为不会,我觉得搜索引擎应该知道这是网站每个页面的导航部分,收录时应该忽略这部分在内容中的份量。况且,主要是每页有这个侧边栏方便大家浏览。如果,这部分侧边栏真的严重影响搜索引擎收录,我以后可能会作一些调整;

3)、永久链接,动态页面伪静态化
为了与以前的系统相一致,日记页面使用如/archives/diaries/文章id.htm的形式,因为本站近3年来有过几次url调整,因此使用不少.htaccess文件中的mod_rewrite重定向,见日记:学习日记利用apache的mod_rewrite模块的全套重定向方案

4、google广告
我认为:不要排斥广告,我在使用这个blog工具为自己和别人带来帮助的同时,也为商家和用户起了一个搭桥的作用,虽然一般的草根blog想靠这个吃饭是空事,但是“聊胜于无”,所以,我在header.php和footer.php中以及内容的末尾加了广告代码,个人感觉应该不会给使用带来较大的负面影响。我不管怎么改,也绝不会像现在有些下载站,下载一个东西要躲过一重又一重的广告陷阱,结果说不定还弄过劳而无获:(

5、额外的收获
本来我对php是一窃不通,这几天修改wordpress及其模板和插件中的代码,对php也有了一点知识了。我想自己以后如果这种阅读和修改代码的事情做多了,说不一定哪天自己还能写个小插件呢:)

6、wordpress的模板和插件很多很多,我觉得目前我用的插件是最基本的,应该说大部分使用wordpress的朋友用的插件都比我的多吧。今天写了一晚上,就到此为止了。以后,我会把系统的一些改动总结在这里。欢迎大家批评指正。谢谢。

学习日记利用apache的mod_rewrite模块的全套重定向方案

学习日记网站经过近3年的运行,其间改变过几次域名和网址结构,造成一些旧的网址不能访问。过去是jsp版本的程序,在程序中可以自由的进行重定向。但是,当我把数据移到wordpress中时,我才发现在apache服务器下的mod_rewrite模块是如此强大。不用程序,所有的重定向都可以在apache的配置文件中做好(我这里是在.htaccess文件中),甚至是把现有系统不存在的、带查询字符串的网址进行自由的301重定向。下面是学习日记Blog全套重定向方案。供自己备忘和需要的朋友参考。
Continue reading "学习日记利用apache的mod_rewrite模块的全套重定向方案"

WordPress数据库基本结构及导入原学习日记数据库相关SQL语句

经过数天的努力,终于把原来学习日记数据库导入了wordpress数据库,wordpress版的学习日记正式开张。作为开张第一篇日记,是关于wordpress数据库的基本结构学习和一些导入相关的sql,供自己备忘和一些有此需求的朋友参考。还请朋友看见错误提示一下。谢谢。
Continue reading "WordPress数据库基本结构及导入原学习日记数据库相关SQL语句"