diff --git a/components/helmet.tsx b/components/helmet.tsx
new file mode 100644
index 000000000..e5302a340
--- /dev/null
+++ b/components/helmet.tsx
@@ -0,0 +1,73 @@
+import NextHead from 'next/head';
+import siteConfig from '../content/site.json';
+
+type HelmetProps = {
+ title?: string;
+ keywords?: string[];
+ canonical?: string;
+ description?: string;
+};
+
+const Helmet = (props: HelmetProps) => (
+
+
+
+ {props.title || siteConfig.title}
+
+
+
+
+
+
+ {props.canonical && }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { /* Global Site Tag (gtag.js) - Google Analytics */}
+ {process.env.GA_SECRET && (
+ <>
+
+
+ >
+ )}
+
+
+);
+
+export default Helmet;
diff --git a/content/site.json b/content/site.json
index 3833d9bb5..56ddc5e43 100644
--- a/content/site.json
+++ b/content/site.json
@@ -37,6 +37,13 @@
"guide to becoming a developer",
"sre roadmap",
"sre",
- "operations roadmap"
+ "operations roadmap",
+ "qa roadmap",
+ "android roadmap",
+ "android developer roadmap",
+ "react roadmap",
+ "react developer roadmap",
+ "dba roadmap",
+ "postgresql dba roadmap"
]
}
diff --git a/pages/[roadmap]/index.tsx b/pages/[roadmap]/index.tsx
index a276b3d71..107936983 100644
--- a/pages/[roadmap]/index.tsx
+++ b/pages/[roadmap]/index.tsx
@@ -7,6 +7,7 @@ import { Footer } from '../../components/footer';
import { PageHeader } from '../../components/page-header';
import { getAllRoadmaps, getRoadmapById, RoadmapType } from '../../lib/roadmap';
import MdRenderer from '../../components/md-renderer';
+import Helmet from '../../components/helmet';
type RoadmapProps = {
roadmap: RoadmapType;
@@ -52,6 +53,11 @@ export default function Roadmap(props: RoadmapProps) {
return (
+
+
diff --git a/pages/guides/[guide].tsx b/pages/guides/[guide].tsx
index 318bb5e20..608713d3a 100644
--- a/pages/guides/[guide].tsx
+++ b/pages/guides/[guide].tsx
@@ -7,6 +7,7 @@ import { ContentPageHeader } from '../../components/content-page-header';
import MdRenderer from '../../components/md-renderer';
import { getAllGuides, getGuideById, GuideType } from '../../lib/guide';
import siteConfig from '../../content/site.json';
+import Helmet from '../../components/helmet';
type GuideProps = {
guide: GuideType;
@@ -19,6 +20,10 @@ export default function Guide(props: GuideProps) {
return (
+
+
+
diff --git a/pages/privacy.tsx b/pages/privacy.tsx
index e15256eb0..7c1dd5e18 100644
--- a/pages/privacy.tsx
+++ b/pages/privacy.tsx
@@ -5,6 +5,7 @@ import { OpensourceBanner } from '../components/opensource-banner';
import { UpdatesBanner } from '../components/updates-banner';
import { Footer } from '../components/footer';
import MdRenderer from '../components/md-renderer';
+import Helmet from '../components/helmet';
export default function Privacy() {
const PrivacyContent = require(`../content/pages/privacy.md`).default;
@@ -12,6 +13,7 @@ export default function Privacy() {
return (
+
diff --git a/pages/roadmaps/index.tsx b/pages/roadmaps/index.tsx
index 42597b5f3..41da4433c 100644
--- a/pages/roadmaps/index.tsx
+++ b/pages/roadmaps/index.tsx
@@ -6,6 +6,7 @@ import { Footer } from '../../components/footer';
import { PageHeader } from '../../components/page-header';
import { RoadmapGridItem } from './components/roadmap-grid-item';
import { getAllRoadmaps, RoadmapType } from '../../lib/roadmap';
+import Helmet from '../../components/helmet';
type RoadmapsProps = {
roadmaps: RoadmapType[];
@@ -17,6 +18,10 @@ export default function Roadmaps(props: RoadmapsProps) {
return (
+
+
diff --git a/pages/terms.tsx b/pages/terms.tsx
index aa3d10e08..674b5d9f1 100644
--- a/pages/terms.tsx
+++ b/pages/terms.tsx
@@ -5,6 +5,7 @@ import { OpensourceBanner } from '../components/opensource-banner';
import { UpdatesBanner } from '../components/updates-banner';
import { Footer } from '../components/footer';
import MdRenderer from '../components/md-renderer';
+import Helmet from '../components/helmet';
export default function Terms() {
const TermsContent = require(`../content/pages/terms.md`).default;
@@ -12,6 +13,7 @@ export default function Terms() {
return (
+
diff --git a/pages/watch/index.tsx b/pages/watch/index.tsx
index 2755a7de3..b03144568 100644
--- a/pages/watch/index.tsx
+++ b/pages/watch/index.tsx
@@ -6,6 +6,7 @@ import { Footer } from '../../components/footer';
import { VideoGridItem } from './components/video-grid-item';
import { PageHeader } from '../../components/page-header';
import { getAllVideos, VideoType } from '../../lib/video';
+import Helmet from '../../components/helmet';
type VideosProps = {
videos: VideoType[]
@@ -17,6 +18,7 @@ export default function Watch(props: VideosProps) {
return (
+