diff --git a/public/index.html b/public/index.html index 6c674f7cd..8b7f37fbd 100755 --- a/public/index.html +++ b/public/index.html @@ -4,15 +4,30 @@
- + + + + + + + + + + + + + + + + @@ -46,6 +61,10 @@ var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); + + function aaa(){ + console.log(111); + } diff --git a/src/common/UrlTool.js b/src/common/UrlTool.js index 991c3a4d7..9f7ffe207 100644 --- a/src/common/UrlTool.js +++ b/src/common/UrlTool.js @@ -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; + } \ No newline at end of file diff --git a/src/common/educoder.js b/src/common/educoder.js index 85b9282d6..ef585ed45 100644 --- a/src/common/educoder.js +++ b/src/common/educoder.js @@ -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'; diff --git a/src/forge/Main/Detail.js b/src/forge/Main/Detail.js index 661e764c0..a21350285 100644 --- a/src/forge/Main/Detail.js +++ b/src/forge/Main/Detail.js @@ -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) => { }) diff --git a/src/forge/Team/List.jsx b/src/forge/Team/List.jsx index c21e3e5fe..27e894c8f 100644 --- a/src/forge/Team/List.jsx +++ b/src/forge/Team/List.jsx @@ -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]) diff --git a/src/forge/Team/Sub/Detail.jsx b/src/forge/Team/Sub/Detail.jsx index 4c2b7b20b..a7c57e793 100644 --- a/src/forge/Team/Sub/Detail.jsx +++ b/src/forge/Team/Sub/Detail.jsx @@ -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=>{}) } diff --git a/src/forge/users/Infos.js b/src/forge/users/Infos.js index 79b793a08..f44c9fa40 100644 --- a/src/forge/users/Infos.js +++ b/src/forge/users/Infos.js @@ -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({