文档章节

富文本替换关键字做SEO内链

kaishui
 kaishui
发布于 2017/09/08 18:17
字数 920
阅读 61
收藏 4

在很多博客系统中,做SEO 都需要涉及到内链,下面主要介绍使用java替换部分关键字(怎样中文分词,有空再写写)的代码。

SEO 内链,把富文本原文:

//原文 假设 建筑为关键字
        String source = "<p alt='建筑设计'>建筑很美,建筑很烂" +
                "<br/>"+
                "建筑很美,<a href=\"http://www.baidu.com/建筑\" title='优秀的建筑'>优秀的建筑</a>" +
                "建筑人,建筑社区" +
                "<img src='http://www.baidu.com/建筑' alt='优秀的建筑'></img>" +
                "</p>" +
                "<p>" +
                "<a href='http://www.baidu.com/建筑' title='优秀的建筑'>优秀的建筑</a>" +
                "<img src='http://www.baidu.com/建筑' alt='优秀的建筑'></img>" +
                "建筑很美,建筑很烂</p><a>baidu建筑真的不错</a>";

转换成我们希望的目标:

  //目标
        String target = "<p alt='建筑设计'><a>建筑</a>很美,<a>建筑</a>很烂" +
                "<br/>" +
                "<a>建筑</a>很美,<a href=\"http://www.mahoooo.com/建筑\" title='优秀的建筑'>优秀的建筑</a>" +
                "<a>建筑</a>人,<a>建筑</a>社区" +
                "<img src='http://www.mahoooo.com/建筑' alt='优秀的建筑'></img>" +
                "</p><p>" +
                "<a href='http://www.mahoooo.com/建筑' title='优秀的建筑'>优秀的建筑</a>" +
                "<img src='http://www.mahoooo.com/建筑' alt='优秀的建筑'></img>" +
                "<a>建筑</a>很美,<a>建筑</a>很烂</p><a>mahoooo建筑真的不错</a>";

通过原文和想要得到的目标比对,可以总结出:

1. 不想替换掉html 标签里面的文字,例如: src='http://www.baidu.com/建筑', alt='建筑设计'
2. 不希望替换掉<a href='http://www.baidu.com/建筑' title='的建筑'>优秀的建筑</a> text中的内容,既:优秀的建筑

通过上述分析(经过多种正则表达式测试,各种弯路,尝试过使用jsoup等工具类,中文分词保持<a>标签等方法):

public static void main(String[] args) {
//        String regex = "(?=(<a.*?>(.*?)</a>))";
        //原文
        String source = "<p alt='建筑设计'>建筑很美,建筑很烂" +
                "<br/>"+
                "建筑很美,<a href=\"http://www.baidu.com/建筑\" title='优秀的建筑'>优秀的建筑</a>" +
                "建筑人,建筑社区" +
                "<img src='http://www.baidu.com/建筑' alt='优秀的建筑'></img>" +
                "</p>" +
                "<p>" +
                "<a href='http://www.baidu.com/建筑' title='优秀的建筑'>优秀的建筑</a>" +
                "<img src='http://www.baidu.com/建筑' alt='优秀的建筑'></img>" +
                "建筑很美,建筑很烂</p><a>baidu建筑真的不错</a>";

        //目标
        String target = "<p alt='建筑设计'><a>建筑</a>很美,<a>建筑</a>很烂" +
                "<br/>" +
                "<a>建筑</a>很美,<a href=\"http://www.mahoooo.com/建筑\" title='优秀的建筑'>优秀的建筑</a>" +
                "<a>建筑</a>人,<a>建筑</a>社区" +
                "<img src='http://www.mahoooo.com/建筑' alt='优秀的建筑'></img>" +
                "</p><p>" +
                "<a href='http://www.mahoooo.com/建筑' title='优秀的建筑'>优秀的建筑</a>" +
                "<img src='http://www.mahoooo.com/建筑' alt='优秀的建筑'></img>" +
                "<a>建筑</a>很美,<a>建筑</a>很烂</p><a>mahoooo建筑真的不错</a>";


//        String regex = "<[^a].*?>.*?<";

        //主要考虑html标签里面的属性 value值不能替换,和<a>标签text()不能替换,
        // 例如:匹配 src="***" 和 <a href=''>建筑<
        //之后就排除匹配段,其他都可以替换关键字
        String regex = "([\\w]+(='.*?'))|([\\w]+(=\".*?\"))|(<a.*?>.*?<)";
        Pattern p = Pattern.compile(regex);

        // 获取 matcher 对象
        Matcher m = p.matcher(source);
        //保存结果
        StringBuffer result = new StringBuffer();
        //上一个结束位置
        int lastEnd = 0;
        //是否匹配
        while (m.find()) {
            System.out.println("text:" + m.group());
            System.out.println("start: " + m.start() + "end:" + m.end());
            //提取没有匹配段,替换关键字并拼接
            result.append(source.substring(lastEnd,m.start()).replaceAll("建筑", "<a>建筑</a>"));
            //拼接匹配段
            result.append(source.substring(m.start(), m.end()));
            //作为下一个未匹配段的开始下标
            lastEnd = m.end();
        }
        //最后未匹配段
        result.append(source.substring(lastEnd).replaceAll("建筑", "<a>建筑</a>"));
        System.out.println("result:" + result.toString());

    }

© 著作权归作者所有

共有 人打赏支持
kaishui
粉丝 53
博文 12
码字总数 10711
作品 0
广州
程序员
私信 提问
搜索引擎优化(SEO)的四大误区?

一个SEOer会在学习操作整个过程中会闯入一个又一个误区。为了SEO更清晰的被大家理解,也为了缩短大家的搜索引擎优化项目的实施时间,我总结了以下四种常见的误区,与大家分享下! 误区一:排名...

范文远
2011/02/23
295
4
如何做到网站排名百战百胜

常听人说,知己知彼才能百战百胜,这告诉了我们,打败敌人先要了解敌人,我们做排名也是一样,想要排名靠前,就必须要了解对手。 对于“SEO”这个产物,做为进入互联网更晚的企业站们来说对其...

vipzhongxiaofei
2012/09/12
0
0
Seo Panel 3.1.0 发布,网站搜索优化管理

Seo Panel 3.1.0 发布了,该版本使用 Alexa 的回链替换 Yahoo 的回链服务,因为 Yahoo 不再提供此服务;删除了 Yahoo 的饱和检查;修复了 Google 位置检测以及站点审计工具的 bug;修复了一些...

红薯
2012/02/22
710
3
SEO学习解剖外链高级操作策略

“大站靠内链,小站靠外链”小编和大家一致认为无论是大站还是小站,内链和外链都必须要做的,外链也是SEO搜索引擎中必不可少的一部分,所以今天dapeiw小编总结了外链的一些作用、表现形式以...

lizhiww
03/21
0
0
企业网站优化应该正确做好SEO优化技巧!

网站SEO优化流程对于很多刚踏入SEO领域的朋友来说并不容易掌握,若是你对于网站SEO优化没有一个正确的观念亦或者说是思维、对搜索引擎算法规则不能熟练的掌握,在优化工作的实际操作中极易出...

1533031208314616
08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 MySQL 的二进制日志恢复数据库数据

经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响。所以本文我们将和大家一起分享学习下如何通过 MySQL 的二...

吴伟祥
14分钟前
0
0
org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may

org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may 2017年07月21日 14:52:10 子木HAPPY阳VIP 阅读数:14134 标签: tomcatnginx 更多......

linjin200
15分钟前
0
0
线下工坊|Blockchain Coding Day:零基础教你开发DAPP(北京)

我们的目标是通过编程学习让你更了解区块链技术。这将对区块链开发初学者一次很好的体验。这里需要强调一下,编程零基础也能学会。 我们将以小组的形式,由教练带领学员完成DAPP开发。每位学...

HiBlock
52分钟前
2
0
查看内存情况

jinfo:可以输出并修改运行时的java 进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat:一个极强的监视VM内存工具。...

Canaan_
53分钟前
2
0
基于对象特征的推荐

(本实验选用数据为真实电商脱敏数据,仅用于学习,请勿商用) 在上一期基于协同过滤的的推荐场景中,我们介绍了如何通过PAI快速搭建一个基于协同过滤方案的推荐系统,这一节会介绍一些如何基...

阿里云官方博客
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部