用Django實現網頁Url使用漢語拼音PinYin作為SEO最佳化的實現方法

來源:互聯網
上載者:User

拼音作為Seo最佳化,主要的使用者是中文的使用者.而拼音seo最佳化的使用場合主要有:

1.拼音網域名稱.

對中國人來說, 拼音網域名稱相對英文網域名稱好記, 一個簡單好記的網域名稱對於一個創業網站來說,無疑是成功了一半。比如“baidu”、“taobao”、“xunlei”、“douban”等等雙位元組拼音網域名稱便於記憶和傳播,可謂是好網域名稱中的典範,對推動這些網站的發展做出了巨大貢獻。所以精挑細選一個好的拼音網域名稱顯得非常重要。

    對於個人站長來說,與其辛辛苦苦絞盡腦汁想個響亮全球的網域名稱,不如選擇一個容易最佳化的網域名稱。大的品牌站最佳化方式和小的個人站長不同,大站傾向與內頁最佳化,首頁主要是確定品牌的排名。比如馬鈴薯,優酷, 起點,紅袖,晉江,這類大站,其網域名稱就需要考慮品牌效果,並且讓使用者能夠方便記憶。 而個人站長投資少,權重低,充分利用首頁權重是上策。這種情況下,拼音網域名稱的優勢就十分明顯。

   拼音網域名稱,可以分為兩類,一類是漢字首拼字母網域名稱,如玄幻小說網(xhxsw),小說閱讀網(xsydw),,另一類是漢字全拼, 比如xuanhuanxiaoshuowang,xiaoshuoyueduwang。 如果拼音首拼和全拼都被人註冊了, 就想辦法弄個全拼+首拼的網域名稱, 比如www.xiaoshuoyd.com, 作為小說閱讀網的網域名稱, xiaoshuo這個關鍵詞的搜尋量還行,而且包含在網域名稱裡面,所以,就算沒有完整的拼音網域名稱,可以用類似的來替代,但網域名稱的開頭最好是所需關鍵詞的開頭。(本節整理自網路.)

2.拼音連結. 將文章的url使用漢字標題的拼音作為url連結, 這個在使用者使用拼音搜尋的時候, 可以實現SEO的最佳化.主要還是2種拼音連結,一種是漢字首拼字母,另一種是漢字全拼拼音.

本文就主要是討論用Django實現網頁連結Url使用漢語拼音PinYin作為SEO最佳化的實現方法.

用漢字作為url, 關鍵和痛點就在於將漢字轉為拼音, 所以, 本文主要是考慮如何將漢字轉為拼音, 並且用在django中.

2.1 使用python實現漢字轉拼音模組

這個使用一個字典和轉化程式就行.網上有一個署名為caocao的人做了一個python的漢字轉拼音的模組.最原始的程式參考這篇文章:將GBK漢字轉化為拼音的Python小程式 .
 http://blog.csdn.net/nethermit/article/details/156193 和這裡:http://www.cnblogs.com/caocao/archive/2005/09/13/235705.html ,這個排版好些.

文中用到的convert.txt就是字典,但是作者的部落格中沒有提供下載.我通過網路搜尋,從其他途徑下載到了整個壓縮包,包括字典和轉換程式.該程式是基於GBK的, 要把漢字分成高低位來處理,一般人理解不了,我做了點改進就是把字典轉化為utf-8的,因為在django中使用的代碼就是utf-8的. 然後把他的程式也做了改進, 改成處理unicode字元,因為Unicode字元只需要處理一個字元,不用把字元分開成兩半.

我的convert程式:

# -*- coding: utf-8 -*- # ------------------------------------------------------------# Script   Name: convert.py# Creation Date: 2010-09-21  02:12# Last Modified: 2011-11-12 18:38:13# Copyright (c)2011, DDTCMS Project# Purpose: This file used for DDTCMS Project# ------------------------------------------------------------######################################   Written by caocao               ##   Modified by huyoo353@126.com    ##   caocao@eastday.com              ##   http://nethermit.yeah.net       ####################################### python.import sys,osimport reimport stringclass CConvert:def __init__(self):self.has_shengdiao = Falseself.just_shengmu  = Falseself.spliter = '-'"Load data table"try:fp=open(os.path.join(settings.PROJECT_DIR, 'utils', 'convert-utf-8.txt'))except IOError:print "Can't load data from convert-utf-8.txt\nPlease make sure this file exists."sys.exit(1)else:self.data=fp.read().decode("utf-8")# decoded data to unicodefp.close()def convert1(self, strIn):"Convert Unicode strIn to PinYin"length, strOutKey, strOutValue, i=len(strIn), "", "", 0while i<length:code1 =ord(strIn[i:i+1])if code1>=0x4e02 and code1<=0xe863:strTemp   = self.getIndex(strIn[i:i+1])if not self.has_shengdiao:strTemp  = strTemp[:-1]strLength = len(strTemp)if strLength<1:strLength=1strOutKey   += string.center(strIn[i:i+1], strLength)+" "strOutValue += self.spliter + string.center(strTemp, strLength) + self.spliterelse:#ascii code;strOutKey+=strIn[i:i+1]+" "strOutValue+=strIn[i:i+1] + ' 'i+=1##############################txlist = utf8String.split()#out=convert.convert(utf8String)#l=[]#for t in map(convert.convert, txlist):#l.append(t[0])#v = '-'.join(l).replace(' ','').replace(u'--','-').strip('-')#############################return [strOutValue, strOutKey]def getIndex(self, strIn):"Convert single Unicode to PinYin from index"if strIn==' ':return self.spliterif set(strIn).issubset("'\"`~!@#$%^&*()=+[]{}\\|;:,.<>/?"):return self.spliter # or return ""if set(strIn).issubset("-—!##%%&&()*,、。:;?? @@\{{|}}~~‘’“”《》【】++==×¥·… ".decode("utf-8")):return ""pos=re.search("^"+strIn+"([0-9a-zA-Z]+)", self.data, re.M)if pos==None:return strInelse:if not self.just_shengmu:return pos.group(1)else:return pos.group(1)[:1]def convert(self, strIn):"Convert Unicode strIn to PinYin"if self.spliter != '-' and self.spliter !='_' and self.spliter != '' and self.spliter != ' ':self.spliter = '-'pinyin_list=[]for c in strIn :pinyin_list.append(self.getIndex(c))pinyin=''for p in pinyin_list:if p==' ':pinyin+= self.splitercontinueif len(p)<2:# only shengmu,just get one char,or number#if p.isdigit():#pinyin += p + ' '#else:#pinyin += p + ' 'pinyin += p + ' 'else:if not self.has_shengdiao: p = p[:-1]pinyin += self.spliter + p + self.spliterpinyin = pinyin.replace(' ','') \.replace(self.spliter+self.spliter,self.spliter) \.strip(self.spliter+' ').replace(self.spliter+self.spliter,self.spliter)return pinyin

上文代碼中,convert1()函數是原來作者提供的,我給它改了名字.我把我寫的convert替換了原來的函數名, 並且把字典檔案改成了utf-8編碼的.所以要簡單些.

convert函數提供了

self.has_shengdiao = False
self.just_shengmu = False
self.spliter = '-'
用來配置參數, has_shengdiao,是漢字轉拼音的時候帶上拼音,

just_shengmu ,是僅僅把漢字字串轉為漢字首拼字母串, 為false的時候,轉為全拼字串.

spliter是用來分隔漢字的.為空白的時候,不把轉換結果用spliter分開, 預設使用"-"(橫線來串連漢字拼音PINYIN,因為W3C推薦在Url中使用-作為連字號,而不是底線_來連接字串,因為底線作為連結連接字串的時候,url在地址欄中好像斷掉了一樣,_底線經常看不到.)

字典檔案,本部落格也提供不了,但是大家可以搜尋下載原作的的字典, 然後使用支援utf-8轉換的軟體轉換一下就行了.

有需要的也可以和我聯絡.

--------------------------

2012-7-30 補充 字典如下,已轉換為utf-8格式,無BOM。

檔案名稱: convert-utf-8.txt 
網  址: http://www.kuaipan.cn/file/id_41002888838774807.htm

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.