mirror of
https://github.com/kamranahmedse/developer-roadmap.git
synced 2025-02-21 09:42:29 +01:00
Add canonicals and fix og:url on all pages
This commit is contained in:
parent
d5495f7280
commit
52d00a0654
@ -14,6 +14,7 @@ export interface Props {
|
||||
description?: string;
|
||||
keywords?: string[];
|
||||
noIndex?: boolean;
|
||||
permalink?: string;
|
||||
sponsor?: SponsorType;
|
||||
}
|
||||
|
||||
@ -22,8 +23,11 @@ const {
|
||||
description = siteConfig.description,
|
||||
keywords = siteConfig.keywords,
|
||||
noIndex = false,
|
||||
permalink = '',
|
||||
sponsor,
|
||||
} = Astro.props;
|
||||
|
||||
const currentPageAbsoluteUrl = `https://roadmap.sh${permalink}`;
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
@ -53,7 +57,9 @@ const {
|
||||
<meta property='og:title' content={title} />
|
||||
<meta property='og:description' content={description} />
|
||||
<meta property='og:type' content='website' />
|
||||
<meta property='og:url' content='https://roadmap.sh' />
|
||||
<meta property='og:url' content={currentPageAbsoluteUrl} />
|
||||
|
||||
<link rel='canonical' href={currentPageAbsoluteUrl} />
|
||||
|
||||
<meta name='mobile-web-app-capable' content='yes' />
|
||||
<meta name='apple-mobile-web-app-capable' content='yes' />
|
||||
|
@ -3,7 +3,7 @@ import Icon from '../components/Icon.astro';
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
---
|
||||
|
||||
<BaseLayout title='Page not found'>
|
||||
<BaseLayout title='Page not found' permalink={'/404/'}>
|
||||
<div class='bg-gray-100'>
|
||||
<div
|
||||
class='py-10 md:py-32 container flex flex-col md:flex-row items-center justify-center gap-7 '
|
||||
|
@ -15,16 +15,24 @@ export async function getStaticPaths() {
|
||||
}
|
||||
|
||||
const { topicId } = Astro.params;
|
||||
const { file, breadcrumbs, roadmapId, roadmap, heading } = Astro.props as TopicFileType;
|
||||
const { file, breadcrumbs, roadmapId, roadmap, heading } =
|
||||
Astro.props as TopicFileType;
|
||||
---
|
||||
|
||||
<BaseLayout title={`${heading} - roadmap.sh`} description={`Free resources to learn ${heading} in ${roadmap.featuredTitle}. Everything you need to know about ${heading} and how it realtes to ${roadmap.featuredTitle}.`} noIndex={true}>
|
||||
<BaseLayout
|
||||
title={`${heading} - roadmap.sh`}
|
||||
description={`Free resources to learn ${heading} in ${roadmap.featuredTitle}. Everything you need to know about ${heading} and how it realtes to ${roadmap.featuredTitle}.`}
|
||||
noIndex={true}
|
||||
permalink={`/${topicId}/`}
|
||||
>
|
||||
<RoadmapBanner roadmapId={roadmapId} roadmap={roadmap} />
|
||||
<div class="bg-gray-50">
|
||||
<div class='bg-gray-50'>
|
||||
<Breadcrumbs breadcrumbs={breadcrumbs} roadmapId={roadmapId} />
|
||||
|
||||
<div class="container pb-16 prose prose-p:mt-0 prose-h1:mb-4 prose-h2:mb-3 prose-h2:mt-0">
|
||||
<main id="main-content">
|
||||
<div
|
||||
class='container pb-16 prose prose-p:mt-0 prose-h1:mb-4 prose-h2:mb-3 prose-h2:mt-0'
|
||||
>
|
||||
<main id='main-content'>
|
||||
<file.Content />
|
||||
</main>
|
||||
</div>
|
||||
|
@ -25,6 +25,7 @@ const roadmapData = roadmapFile.frontmatter as RoadmapFrontmatter;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
permalink={`/${roadmapId}/`}
|
||||
title={roadmapData?.seo?.title}
|
||||
description={roadmapData.seo.description}
|
||||
keywords={roadmapData.seo.keywords}
|
||||
|
@ -22,7 +22,12 @@ const roadmapFile = await import(`../../roadmaps/${roadmapId}/${roadmapId}.md`);
|
||||
const roadmapData = roadmapFile.frontmatter as RoadmapFrontmatter;
|
||||
---
|
||||
|
||||
<BaseLayout title={`${roadmapData.title} Topics`} description={roadmapData.seo.description} keywords={roadmapData.seo.keywords}>
|
||||
<BaseLayout
|
||||
title={`${roadmapData.title} Topics`}
|
||||
description={roadmapData.seo.description}
|
||||
keywords={roadmapData.seo.keywords}
|
||||
permalink={`/${roadmapId}/topics/`}
|
||||
>
|
||||
<RoadmapHeader
|
||||
description={roadmapData.description}
|
||||
title={`${roadmapData.featuredTitle} Topics`}
|
||||
@ -31,8 +36,8 @@ const roadmapData = roadmapFile.frontmatter as RoadmapFrontmatter;
|
||||
hasTopics={false}
|
||||
/>
|
||||
|
||||
<div class="bg-gray-50 pt-5 pb-8 sm:pt-10 sm:pb-16">
|
||||
<div class="container">
|
||||
<div class='bg-gray-50 pt-5 pb-8 sm:pt-10 sm:pb-16'>
|
||||
<div class='container'>
|
||||
{
|
||||
topics.map((topic) => {
|
||||
// Breadcrumbs have three additional items e.g.
|
||||
|
@ -2,7 +2,7 @@
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
---
|
||||
|
||||
<BaseLayout title='About roadmap.sh'>
|
||||
<BaseLayout title='About roadmap.sh' permalink={'/about/'}>
|
||||
<div class='bg-white border-b pt-7 pb-7 sm:pt-12 sm:pb-10'>
|
||||
<div class='container'>
|
||||
<div class='flex items-center'>
|
||||
|
@ -22,7 +22,11 @@ const { guide } = Astro.props;
|
||||
const { frontmatter: guideData } = guide;
|
||||
---
|
||||
|
||||
<BaseLayout title={guideData.seo.title} description={guideData.seo.description}>
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/guides/${guideId}/`}
|
||||
>
|
||||
<GuideHeader guide={guide} />
|
||||
|
||||
<div class='bg-gray-50 py-5 sm:py-10'>
|
||||
|
@ -7,7 +7,11 @@ import { getAllGuides } from '../../lib/guide';
|
||||
const guides = await getAllGuides();
|
||||
---
|
||||
|
||||
<BaseLayout title='Guides - roadmap.sh' description={'Detailed guides on Software Engineering Topics'}>
|
||||
<BaseLayout
|
||||
title='Guides - roadmap.sh'
|
||||
description={'Detailed guides on Software Engineering Topics'}
|
||||
permalink={`/guides/`}
|
||||
>
|
||||
<SimplePageHeader
|
||||
title='Guides'
|
||||
description='Succinct graphical explanations to engineering topics.'
|
||||
|
@ -13,7 +13,7 @@ const guides = await getAllGuides();
|
||||
const videos = await getAllVideos();
|
||||
---
|
||||
|
||||
<BaseLayout title='Developer Roadmaps' description={"Community driven roadmaps, articles and guides for developers to grow in their career."}>
|
||||
<BaseLayout title='Developer Roadmaps' description={"Community driven roadmaps, articles and guides for developers to grow in their career."} permalink={'/'}>
|
||||
<div class='bg-gradient-to-b from-slate-900 to-black'>
|
||||
<div class='border-b border-b-slate-900'>
|
||||
<div
|
||||
|
@ -15,6 +15,7 @@ Here is the list of PDF links for each of the roadmaps.
|
||||
* **QA Roadmap** - [Roadmap Link](https://roadmap.sh/qa) / [PDF Link](https://roadmap.sh/pdfs/qa.pdf)
|
||||
* **ASP.NET Core Roadmap** - [Roadmap Link](https://roadmap.sh/aspnet-core) / [PDF Link](https://roadmap.sh/pdfs/aspnet-core.pdf)
|
||||
* **Flutter Roadmap** - [Roadmap Link](https://roadmap.sh/flutter) / [PDF Link](https://roadmap.sh/pdfs/flutter.pdf)
|
||||
* **Go Roadmap** - [Roadmap Link](https://roadmap.sh/golang) / [PDF Link](https://roadmap.sh/pdfs/golang.pdf)
|
||||
* **Software Architect Roadmap** - [Roadmap Link](https://roadmap.sh/software-architect) / [PDF Link](https://roadmap.sh/pdfs/software-architect.pdf)
|
||||
* **Software Design and Architecture Roadmap** - [Roadmap Link](https://roadmap.sh/software-design-architecture) / [PDF Link](https://roadmap.sh/pdfs/software-design-architecture.pdf)
|
||||
* **JavaScript Roadmap** - [Roadmap Link](https://roadmap.sh/javascript) / [PDF Link](https://roadmap.sh/pdfs/javascript.pdf)
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
layout: ../layouts/MarkdownLayout.astro
|
||||
title: Privacy Policy - roadmap.sh
|
||||
noIndex: true
|
||||
---
|
||||
|
||||
# Privacy Policy
|
||||
|
@ -8,16 +8,20 @@ const roleRoadmaps = await getRoadmapsByTag('role-roadmap');
|
||||
const skillRoadmaps = await getRoadmapsByTag('skill-roadmap');
|
||||
---
|
||||
|
||||
<BaseLayout title="Developer Roadmaps" description={"Step by step guides and paths to learn different tools or technologies"}>
|
||||
<BaseLayout
|
||||
title='Developer Roadmaps'
|
||||
description={'Step by step guides and paths to learn different tools or technologies'}
|
||||
permalink={'/roadmaps/'}
|
||||
>
|
||||
<SimplePageHeader
|
||||
title="Developer Roadmaps"
|
||||
description="Step by step guides and paths to learn different tools or technologies"
|
||||
title='Developer Roadmaps'
|
||||
description='Step by step guides and paths to learn different tools or technologies'
|
||||
showYouTubeAlert={true}
|
||||
/>
|
||||
|
||||
<div class="bg-gray-100 pt-4 pb-14 sm:pt-8 sm:pb-16">
|
||||
<div class="container">
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-0.5 sm:gap-3">
|
||||
<div class='bg-gray-100 pt-4 pb-14 sm:pt-8 sm:pb-16'>
|
||||
<div class='container'>
|
||||
<div class='grid grid-cols-1 sm:grid-cols-2 gap-0.5 sm:gap-3'>
|
||||
{
|
||||
roleRoadmaps.map((roleRoadmap) => (
|
||||
<GridRoadmapItem roadmap={roleRoadmap} />
|
||||
|
@ -7,6 +7,7 @@ import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
<BaseLayout
|
||||
title='Signup - roadmap.sh'
|
||||
description='Register yourself to receive occasional emails about new roadmaps, updates, guides and videos'
|
||||
permalink={'/signup/'}
|
||||
>
|
||||
<div class='container'>
|
||||
<div
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
layout: ../layouts/MarkdownLayout.astro
|
||||
title: Terms and Conditions - roadmap.sh
|
||||
noIndex: true
|
||||
---
|
||||
|
||||
# Terms of Service
|
||||
|
@ -24,6 +24,7 @@ const { video } = Astro.props;
|
||||
<BaseLayout
|
||||
title={video.frontmatter.title}
|
||||
description={video.frontmatter.description}
|
||||
permalink={`/videos/${videoId}/`}
|
||||
>
|
||||
<VideoHeader video={video} />
|
||||
|
||||
|
@ -10,6 +10,7 @@ const videos = await getAllVideos();
|
||||
<BaseLayout
|
||||
title='Illustrated Videos - roadmap.sh'
|
||||
description={'Graphical video demonstrations on software engineering topics.'}
|
||||
permalink={`/videos/`}
|
||||
>
|
||||
<SimplePageHeader
|
||||
title='Videos'
|
||||
|
Loading…
x
Reference in New Issue
Block a user