From cf5d669f08a1c2cdf86682e5d809930c343d87b8 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Thu, 7 Nov 2019 22:38:15 +0400 Subject: [PATCH] Update SEO tags in header --- components/helmet/index.js | 58 +++++++++++++++++++++++++++ components/page-header/index.js | 2 +- data/site.json | 29 +++++++++++++- layouts/default/head.js | 19 --------- layouts/default/index.js | 6 +-- pages/guides/[guide].js | 8 ++-- static/favicon.ico | Bin 1150 -> 0 bytes static/manifest/apple-touch-icon.png | Bin 0 -> 4186 bytes static/manifest/favicon.ico | Bin 0 -> 15406 bytes static/manifest/icon152.png | Bin 0 -> 2451 bytes static/manifest/icon16.png | Bin 0 -> 123 bytes static/manifest/icon196.png | Bin 0 -> 3731 bytes static/manifest/icon32.png | Bin 0 -> 267 bytes static/manifest/manifest.json | 27 +++++++++++++ 14 files changed, 121 insertions(+), 28 deletions(-) create mode 100644 components/helmet/index.js delete mode 100644 layouts/default/head.js delete mode 100644 static/favicon.ico create mode 100755 static/manifest/apple-touch-icon.png create mode 100755 static/manifest/favicon.ico create mode 100755 static/manifest/icon152.png create mode 100755 static/manifest/icon16.png create mode 100755 static/manifest/icon196.png create mode 100755 static/manifest/icon32.png create mode 100644 static/manifest/manifest.json diff --git a/components/helmet/index.js b/components/helmet/index.js new file mode 100644 index 000000000..bfdb2ca45 --- /dev/null +++ b/components/helmet/index.js @@ -0,0 +1,58 @@ +import NextHead from 'next/head'; +import siteConfig from 'data/site'; + +const prepareTitle = (givenTitle) => { + givenTitle = givenTitle || siteConfig.title; + return `${givenTitle} - ${siteConfig.name}`; +}; + +const prepareDescription = (givenDescription) => { + return givenDescription || siteConfig.description; +}; + +const Helmet = (props) => ( + + + + { prepareTitle(props.title) } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +export default Helmet; diff --git a/components/page-header/index.js b/components/page-header/index.js index 2a9684827..485a22659 100644 --- a/components/page-header/index.js +++ b/components/page-header/index.js @@ -19,4 +19,4 @@ const PageHeader = () => ( ); -export default PageHeader; \ No newline at end of file +export default PageHeader; diff --git a/data/site.json b/data/site.json index c178ae8a3..ae9082baf 100644 --- a/data/site.json +++ b/data/site.json @@ -1,6 +1,31 @@ { - "twitter": "roadmapsh", + "author": "Kamran Ahmed", + "title": "Roadmaps to becoming a modern developer", + "name": "roadmap.sh", + "description": "Roadmaps, articles and resources to help you choose your path, learn and improve.", + "twitter": "kamranahmedse", + "facebook": "kamranahmedse", "url": "https://roadmap.sh", + "logo": "/static/brand.png", "repoUrl": "https://github.com/kamranahmedse/roadmap-next", - "dataUrl": "/tree/master/data" + "dataUrl": "/tree/master/data", + "keywords": [ + "roadmap", + "developer roadmaps", + "developer roadmap", + "frontend developer", + "frontend developer roadmap", + "frontend", + "frontend roadmap", + "backend", + "backend developer", + "backend developer roadmap", + "devops", + "devops roadmap", + "fullstack developer roadmap", + "guide to becoming a developer", + "sre roadmap", + "sre", + "operations roadmap" + ] } diff --git a/layouts/default/head.js b/layouts/default/head.js deleted file mode 100644 index 3551dfd24..000000000 --- a/layouts/default/head.js +++ /dev/null @@ -1,19 +0,0 @@ -import NextHead from 'next/head'; - -const defaultDescription = 'Roadmaps, articles and resources for modern developers'; -const defaultOgUrl = 'https://roadmap.sh'; - -const Head = (props) => ( - - - { props.title || '' } - - - - - - - -); - -export default Head; \ No newline at end of file diff --git a/layouts/default/index.js b/layouts/default/index.js index 439b39bac..778951879 100644 --- a/layouts/default/index.js +++ b/layouts/default/index.js @@ -1,11 +1,11 @@ -import Head from './head'; +import Helmet from 'components/helmet'; import './global.scss'; const DefaultLayout = (props) => (
- + { props.children }
); -export default DefaultLayout; \ No newline at end of file +export default DefaultLayout; diff --git a/pages/guides/[guide].js b/pages/guides/[guide].js index 8e5dc688c..330f096d1 100644 --- a/pages/guides/[guide].js +++ b/pages/guides/[guide].js @@ -6,18 +6,20 @@ import GuideBody from 'components/guide-body'; import ShareGuide from 'components/share-guide'; import GuideFooter from 'components/guide-footer'; import { getRequestedGuide } from "lib/guide"; +import Helmet from '../../components/helmet'; const Guide = ({ guide }) => { if (!guide) { - return + return } return ( + - + @@ -26,7 +28,7 @@ const Guide = ({ guide }) => { Guide.getInitialProps = serverOnlyProps(({ req }) => { return { - guide: getRequestedGuide(req) + guide: getRequestedGuide(req), }; }); diff --git a/static/favicon.ico b/static/favicon.ico deleted file mode 100644 index b1bbb39baba94acdfe5f814c1ab02b5756f104d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmbtTv5JF05Z%K=1yK?q*Jz=sPQ*4%{GhA+gf#a4fhWmF*!l%lrWOkYLF*h>z1v+O zm_rj1S7vs7``*m#EKA56{Z=bNy+yv>3Hcy|d{UzjMFyNsgwQ=*8I1oA?wd}()bOM+ z4b%QSsT=26q8-P%u4P$otzYBhKeDf*{~rK@bpzA)2Pa z>2!joX|pk0*G1QLU?Ykm&SNq2Jm*;3ws0J0R_}Qp`o6!>v;2p{0aaBYj^n#$n9{Rz zilPX^FrX;PY;MMz(@*tk3LERwG==Z`*lxEx{}lf}W|}7NJ#PSYm&*lZSz@=_-K~2Z wXTRSgNfH!Afx51dWf`ww%z3nCJ>P6Lux%Uc{vPoc?k{-*OuO{`(h#qYKT(-p-v9sr diff --git a/static/manifest/apple-touch-icon.png b/static/manifest/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..736fdfea29183a2a3781dc5f5de214fa82eafda7 GIT binary patch literal 4186 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 XkHgdb3Fvs|`_CYMGnf`oWr2SIt&0`@ literal 0 HcmV?d00001 diff --git a/static/manifest/icon152.png b/static/manifest/icon152.png new file mode 100755 index 0000000000000000000000000000000000000000..2fa1f417c5abf1c08e6b303b7bf1abfe783d3bda GIT binary patch literal 2451 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 literal 0 HcmV?d00001 diff --git a/static/manifest/icon16.png b/static/manifest/icon16.png new file mode 100755 index 0000000000000000000000000000000000000000..043b2b27527b7f7f33f4a1479ba557f4011d77bf GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`PM$7~Ar}70DG3Qb&O0zB$Sh;~ z^S@t8r>93@eiFMxV#7MgCA~S!A2M5Zvajc6>t{Uiu<4!FqCF1r%pPaO4lC$0FdT3& VWbEC2eIn2_22WQ%mvv4FO#mqdCeZ)@ literal 0 HcmV?d00001 diff --git a/static/manifest/icon196.png b/static/manifest/icon196.png new file mode 100755 index 0000000000000000000000000000000000000000..63dbf37bbdbe09155ba6b979598f36543b0559d1 GIT binary patch literal 3731 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 P^c{nztDnm{r-UW|mRM^@ literal 0 HcmV?d00001 diff --git a/static/manifest/manifest.json b/static/manifest/manifest.json new file mode 100644 index 000000000..30ad83f03 --- /dev/null +++ b/static/manifest/manifest.json @@ -0,0 +1,27 @@ +{ + "dir": "ltr", + "lang": "en", + "name": "Roadmap", + "scope": "/", + "display": "standalone", + "start_url": "https://roadmap.sh/", + "short_name": "Roadmap", + "theme_color": "#EDD07E", + "description": "Roadmaps to becoming a Modern Developer – roadmap.sh", + "orientation": "any", + "background_color": "#101010", + "related_applications": [], + "prefer_related_applications": false, + "icons": [ + { + "src": "/static/manifest/icon152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "/static/manifest/icon196.png", + "sizes": "196x196", + "type": "image/png" + } + ] +}