seo工具


title: seo工具
date: 2018-08-28 20:56:00
tags:
- 工具
- SEO

categories: [Java 工具]


Sitemaps定义:

Google、雅虎、和微软都支持一个被称为xml网站地图(xml Sitemaps)的协议,而百度Sitemap是指百度支持的收录标准,在原有协议上做出了扩展。百度sitemap的作用是通过Sitemap告诉百度蜘蛛全面的站点链接,优化自己的网站。百度Sitemap分为三种格式:txt文本格式、xml格式、Sitemap索引格式。


具体实现,请查看代码注释:

        /**使用本工具请加载jar包org.dom4j
        * 使用方法请看main方法
        * sitemap文件例子可看:
        * https://www.zulily.com/sitemap.xml
        */
        public  class SitemapUtil {

        //xml文件头xmlns属性值:例<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
        private static String xmlns ="http://www.sitemaps.org/schemas/sitemap/0.9";
        //存放文件路径:可为/aaa/bbb/等,最后位必须带/符号
        private static final String filePath="E:/aa/";
        //private static final String filePath=System.getenv("SITE_MAP_PATH");//可通过环境变量拿
        //生成xml文件的编码
        private static final String encode="gbk";

        //以上值可按情况修改

        //用于记录子sitemap文件名,最后用于生成主sitemap文件
        private static ArrayList<String> childSitemaps=new ArrayList<String>();
        //先声明节点
        private static Element urlElement;
        private static Element locElement;
        private static Element freqElement;
        private static Element priElement;

        /**
         * 使用示例
         * @param args
         */
        public static void main(String[] args){

        //初始化document,并赋予带namespace的根节点
        Document document=new DefaultDocument();
        //xmlns即命名空间
        Element root=document.addElement("urlset",xmlns);
        document.setRootElement(root);

        //写入n个子sitemap文件的示例========================
        boolean isOk=false;
        for (int i=1;i<20;i++) {
            //构建document
            for (int j = 0; j < 50000; j++) {
                createChildDom(root, "https://www.scut.edu.cn/new/gasdvgaswcsfes" + j, "weekly", "0.9");
            }
            //写入文件
             isOk =   SitemapUtil.createChoildSitemap(document, "sitemap-child-"+i+".xml");
            if (!isOk){
                //生成出错
            }
        }
        //=====================================================

       //写入主sitemap
        isOk= SitemapUtil.createMainSitemap();
        if (!isOk){
            //生成出错
        }

    }


    /**
     * 创建主sitemap文件,该方法应该在生成所有子sitemap文件调用。
     */
    public static   boolean  createMainSitemap(){
       Document document=new DefaultDocument();
        Element root=document.addElement("sitemapindex",xmlns);
       for (int i=0;i<childSitemaps.size();i++){
            Element sitemap=root.addElement("sitemap");
            Element loc=sitemap.addElement("loc");
            loc.setText(childSitemaps.get(i));
        }
        try {
            writeDocument("sitemap.xml",document);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally {
            //清空根节点下的所有内容
            if (document.hasContent())
                document.clearContent();
        }
        return true;
    }


    public static   boolean createChoildSitemap(Document document ,String filename){
        try {
            writeDocument(filename,document);
            childSitemaps.add(filename);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally {
            //清空根节点下的所有内容
            if (document.hasContent()&&document.getRootElement().hasContent())
                document.getRootElement().clearContent();
        }
        return true;
    }

    /**
     * 将document写入 filePath目录下的fileName文件里
     * @param fileName
     * @param document
     * @throws IOException
     */
    private static   void writeDocument( String fileName,Document document) throws IOException {
        File file=new File(filePath);
        document.setXMLEncoding(encode);
        recursionMkDir(file);
        OutputStreamWriter outputStreamWriter=new OutputStreamWriter(new FileOutputStream(new File(filePath+fileName)));
        document.write(outputStreamWriter);
        //如果outputStreamWriter未关闭,则关闭outputStreamWriter
        if (outputStreamWriter!=null)
        outputStreamWriter.close();
    }

    /**
     * 创建子sitemap的节点,并将其挂载到root节点
     * 例:<url>
     * <loc>https://www.zulily.com/baby-boy-outerwear</loc>
     * <changefreq>daily</changefreq> 值只能为always, hourly, daily, weekly, monthly, yearly及never
     * <priority>0.4</priority>数值为0到1.0,最高为1.0,一般首页的priority最高为1.0
     * </url>
     * @param root
     * @param url
     * @param changefreq
     * @param priority
     */
    private  static void createChildDom(Element root,String url,String changefreq ,String priority){
        urlElement=root.addElement("url");
        locElement=urlElement.addElement("loc");
        freqElement=urlElement.addElement("changefreq");
        priElement=urlElement.addElement("priority");
        locElement.setText(url);
        freqElement.setText(changefreq);
        priElement.setText(priority);
    }

    //递归创建目录
    private static void recursionMkDir(File file) {
        if (file.getParentFile().exists()) {
            file.mkdir();
        } else {
            recursionMkDir(file.getParentFile());
            file.mkdir();
        }
    }

}

Coding Blog     Github Blog

                                                                                                                                                                           
                                                                                                                                                                           
                                                                                               

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值