forked from Gitlink/forgeplus-react
修改meta、link优化seo
This commit is contained in:
parent
93ddee8c9e
commit
ae20016505
|
@ -4,15 +4,30 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="Keywords" Content="gitLink,GitLink,gitlink,trustie,trustieforge,forge,开源,确实开源,代码托管,Git,开源,内源,项目管理,版本控制,开源代码,代码分享,项目协作,开源项目托管,免费代码托管,Git代码托管,Git托管服务,确实让创建更美好,协同开发平台">
|
||||
<meta name=”Description” Content=”GitLink,新一代开源创新服务平台 分布式协作开发 一站式过程管理 高效流水线运维 多层次代码分析 多维度用户画像 分布式协作开发 基于Git打造分布式代码托管环境”>
|
||||
<meta name="description" Content="GitLink,新一代开源创新服务平台 分布式协作开发 一站式过程管理 高效流水线运维 多层次代码分析 多维度用户画像 分布式协作开发 基于Git打造分布式代码托管环境">
|
||||
<meta property="og:title" content="GitLink | 确实开源" />
|
||||
<meta property="og:type" content="Object" />
|
||||
<meta property="og:url" content="https://gitlink.org.cn/" />
|
||||
<meta property="og:image" content="https://www.gitlink.org.cn/images/logo.png" />
|
||||
<meta property="og:image:alt" content="GitLink | 确实开源" />
|
||||
<meta property="og:site_name" content="GitLink" />
|
||||
<meta property="og:description" content="GitLink,新一代开源创新服务平台 分布式协作开发 一站式过程管理 高效流水线运维 多层次代码分析 多维度用户画像 分布式协作开发 基于Git打造分布式代码托管环境" />
|
||||
<meta name="hostname" content="gitlink.org.cn">
|
||||
<meta name="keyboard-shortcuts-preference" content="all">
|
||||
<meta name="expected-hostname" content="gitlink.org.cn">
|
||||
<meta name="go-import" content="gitlink.org.cn git https://gitlink.org.cn">
|
||||
<meta name="octolytics-dimension-user_login" content="GitLink"></meta>
|
||||
<meta name="theme-color" content="#000000">
|
||||
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
|
||||
<meta content="IE=edge" http-equiv="X-UA-Compatible">
|
||||
<meta name="twitter:image:src" content="https://www.gitlink.org.cn/images/logo.png">
|
||||
<meta name="twitter:site" content="@gitlink">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="GitLink | 确实开源">
|
||||
<meta name="twitter:description" content="GitLink,新一代开源创新服务平台 分布式协作开发 一站式过程管理 高效流水线运维 多层次代码分析 多维度用户画像 分布式协作开发 基于Git打造分布式代码托管环境">
|
||||
<meta content="always" name="referrer">
|
||||
<link rel="canonical" href="https://gitlink.org.cn" data-turbo-transient="">
|
||||
<link rel="fluid-icon" href="https://www.gitlink.org.cn/images/logo.png" title="GitLink">
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
||||
<link href="https://gw.alipayobjects.com/os/lib/alipay/alex/2.0.19/bundle/alex.all.global.min.css" rel="stylesheet"/>
|
||||
<link rel="stylesheet" type="text/css" href="%PUBLIC_URL%css/iconfont.css">
|
||||
|
@ -46,6 +61,10 @@
|
|||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
|
||||
function aaa(){
|
||||
console.log(111);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
|
|
|
@ -297,4 +297,47 @@ export function returnbar(str){
|
|||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
// 手动添加/修改mate标签
|
||||
export function addMeta(name, content){
|
||||
if(document.querySelector(`meta[name='${name}']`)){
|
||||
document.querySelector(`meta[name='${name}']`).content=content;
|
||||
}else{
|
||||
const meta = document.createElement('meta');
|
||||
meta.content = content;
|
||||
meta.name = name;
|
||||
document.getElementsByTagName('head')[0].appendChild(meta);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 设置meta中的og:title,og:description,og:url,twitter:title等,优化seo
|
||||
* keyWords 关键词
|
||||
* title 网页标题
|
||||
* description 描述
|
||||
* url 网页地址
|
||||
* owner 项目拥有者或者个人主页用户login
|
||||
* projectId 项目唯一标识
|
||||
*/
|
||||
export function setSeoMeta(keyWords, title, description, url, owner, projectId) {
|
||||
console.log('keyWords:'+ keyWords);
|
||||
document.querySelector(`meta[property='og:title']`).content = title;
|
||||
document.querySelector(`meta[property='og:url']`).content = location.origin + url;
|
||||
document.querySelector(`meta[property='og:description']`).content = description + ' - ' + title;
|
||||
document.querySelector(`meta[property='og:image:alt']`).content = description + ' - ' + title;
|
||||
|
||||
document.querySelector('meta[name="Keywords"]').content=keyWords + 'gitLink,GitLink,gitlink,trustie,trustieforge,forge,开源,确实开源,代码托管,Git,开源,内源,项目管理,版本控制,开源代码,代码分享,项目协作,开源项目托管,免费代码托管,Git代码托管,Git托管服务,确实让创建更美好,协同开发平台';
|
||||
document.querySelector(`meta[name='description']`).content = description;
|
||||
document.querySelector(`meta[name='go-import']`).content = location.host + url + ' git ' + location.origin + url;
|
||||
document.querySelector(`meta[name='octolytics-dimension-user_login']`).content = owner;
|
||||
if (projectId) {
|
||||
document.querySelector(`meta[name='octolytics-dimension-repository_nwo']`).content = owner + '/' + projectId;
|
||||
document.querySelector(`meta[name='octolytics-dimension-repository_network_root_nwo']`).content = owner + '/' + projectId;
|
||||
}
|
||||
document.querySelector(`meta[name='twitter:title']`).content = title;
|
||||
document.querySelector(`meta[name='twitter:description']`).content = description + ' - ' + title;
|
||||
|
||||
document.querySelector(`link[rel='canonical']`).href = location.origin + url;
|
||||
|
||||
}
|
|
@ -7,7 +7,7 @@ export {
|
|||
getImageUrl as getImageUrl,getImageUrlAbsolute as getImageUrlAbsolute,getImage as getImage, getmyUrl as getmyUrl, getRandomNumber as getRandomNumber, getUrl as getUrl, publicSearchs as publicSearchs, getRandomcode as getRandomcode, getUrlmys as getUrlmys, getUrl2 as getUrl2, setImagesUrl as setImagesUrl
|
||||
, getUploadActionUrl as getUploadActionUrl, getUploadActionUrltwo as getUploadActionUrltwo, getUploadActionUrlthree as getUploadActionUrlthree, getUploadActionUrlOfAuth as getUploadActionUrlOfAuth
|
||||
, getTaskUrlById as getTaskUrlById, TEST_HOST, htmlEncode as htmlEncode, getupload_git_file as getupload_git_file, getcdnImageUrl as getcdnImageUrl,
|
||||
turnbar,returnbar
|
||||
turnbar,returnbar,setSeoMeta as setSeoMeta
|
||||
} from './UrlTool';
|
||||
|
||||
export { setmiyah as setmiyah } from './Component';
|
||||
|
|
|
@ -4,6 +4,7 @@ import { Link, Route, Switch } from 'react-router-dom';
|
|||
import { Content, AlignTop } from '../Component/layout';
|
||||
import DetailBanner from './sub/DetailBanner';
|
||||
import cookie from 'react-cookies';
|
||||
import { setSeoMeta } from 'educoder';
|
||||
import { Base64 } from 'js-base64';
|
||||
import '../css/index.scss'
|
||||
import './list.scss';
|
||||
|
@ -406,6 +407,10 @@ class Detail extends Component {
|
|||
forked_count: result.data.forked_count,
|
||||
defaultBranch: result.data.default_branch
|
||||
});
|
||||
// seo优化设置
|
||||
let keyWords=`${owner},${projectsId},${result.data.author.name},`;
|
||||
let title= `${owner}/${projectsId}${result.data.description?':'+result.data.description:''}`;
|
||||
setSeoMeta(keyWords,title,result.data.description,`/${owner}/${projectsId}`,owner,projectsId);
|
||||
}
|
||||
}
|
||||
}).catch((error) => { })
|
||||
|
|
|
@ -7,7 +7,6 @@ import Item from './ListItem';
|
|||
import Right from './RightBox';
|
||||
import NoData from '../Nodata';
|
||||
import CheckProfile from '../Component/ProfileModal/Profile';
|
||||
|
||||
import { Menu , Pagination , Dropdown , Spin } from 'antd';
|
||||
import axios from 'axios';
|
||||
|
||||
|
@ -27,7 +26,7 @@ function List(props){
|
|||
if(organizeDetail){
|
||||
// 更改网页标题
|
||||
const {nickname} = organizeDetail;
|
||||
document.title = `${nickname}`
|
||||
document.title = `${nickname}(${OIdentifier}) ${organizeDetail.description}`
|
||||
}
|
||||
},[organizeDetail])
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ import React , { useEffect , useState } from 'react';
|
|||
import { Route, Switch , Link } from "react-router-dom";
|
||||
import Loadable from "react-loadable";
|
||||
import Loading from "../../../Loading";
|
||||
import {AlignCenter} from '../../Component/layout';
|
||||
import { setSeoMeta } from "educoder";
|
||||
import Cards from '../../Component/Cards';
|
||||
import axios from 'axios';
|
||||
import '../Index.scss';
|
||||
|
@ -62,6 +62,9 @@ function Detail(props){
|
|||
axios.get(url).then(result=>{
|
||||
if(result && result.data){
|
||||
setDetail(result.data);
|
||||
let keyWords=`${result.data.nickname},${id},`;
|
||||
let title= result.data.nickname+'('+ id +') ' +result.data.description;
|
||||
setSeoMeta(keyWords,title,title,`/${id}`,id);
|
||||
}
|
||||
}).catch(error=>{})
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import { Spin , Menu } from "antd";
|
|||
import FocusButton from "../UsersList/focus_button";
|
||||
|
||||
import axios from "axios";
|
||||
import { getImageUrl } from "educoder";
|
||||
import { getImageUrl,setSeoMeta } from "educoder";
|
||||
import { Route, Switch } from "react-router-dom";
|
||||
import Avatar from './Avatar/Index';
|
||||
|
||||
|
@ -154,6 +154,9 @@ class Infos extends Component {
|
|||
const { pathname } = this.props.location;
|
||||
this.renderPath(pathname,result.data);
|
||||
document.title = result.data.username ? result.data.username : username;
|
||||
let keyWords=`${result.data.username},${username},`;
|
||||
let title= result.data.username+'('+ username +')';
|
||||
setSeoMeta(keyWords,title,title,`/${username}`,username);
|
||||
})
|
||||
.catch((error) => {
|
||||
this.setState({
|
||||
|
|
Loading…
Reference in New Issue