Use canonical URLs (#1883)

This commit is contained in:
Matthew Miner 2023-07-10 09:46:36 -05:00 committed by Dessalines
parent 2a9a6f72ff
commit 03aaa1bda1
5 changed files with 12 additions and 0 deletions

View file

@ -8,6 +8,7 @@ import { I18NextService } from "../../services";
interface HtmlTagsProps { interface HtmlTagsProps {
title: string; title: string;
path: string; path: string;
canonicalPath?: string;
description?: string; description?: string;
image?: string; image?: string;
} }
@ -16,6 +17,8 @@ interface HtmlTagsProps {
export class HtmlTags extends Component<HtmlTagsProps, any> { export class HtmlTags extends Component<HtmlTagsProps, any> {
render() { render() {
const url = httpExternalPath(this.props.path); const url = httpExternalPath(this.props.path);
const canonicalUrl =
this.props.canonicalPath ?? httpExternalPath(this.props.path);
const desc = this.props.description; const desc = this.props.description;
const image = this.props.image; const image = this.props.image;
@ -30,6 +33,8 @@ export class HtmlTags extends Component<HtmlTagsProps, any> {
<meta key={u} property={u} content={url} /> <meta key={u} property={u} content={url} />
))} ))}
<link rel="canonical" href={canonicalUrl} />
{/* Open Graph / Facebook */} {/* Open Graph / Facebook */}
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />

View file

@ -312,6 +312,7 @@ export class Community extends Component<
<HtmlTags <HtmlTags
title={this.documentTitle} title={this.documentTitle}
path={this.context.router.route.match.url} path={this.context.router.route.match.url}
canonicalPath={res.community_view.community.actor_id}
description={res.community_view.community.description} description={res.community_view.community.description}
image={res.community_view.community.icon} image={res.community_view.community.icon}
/> />

View file

@ -324,6 +324,7 @@ export class Profile extends Component<
<HtmlTags <HtmlTags
title={this.documentTitle} title={this.documentTitle}
path={this.context.router.route.match.url} path={this.context.router.route.match.url}
canonicalPath={personRes.person_view.person.actor_id}
description={personRes.person_view.person.bio} description={personRes.person_view.person.bio}
image={personRes.person_view.person.avatar} image={personRes.person_view.person.avatar}
/> />

View file

@ -353,6 +353,7 @@ export class Post extends Component<any, PostState> {
<HtmlTags <HtmlTags
title={this.documentTitle} title={this.documentTitle}
path={this.context.router.route.match.url} path={this.context.router.route.match.url}
canonicalPath={res.post_view.post.ap_id}
image={this.imageTag} image={this.imageTag}
description={res.post_view.post.body} description={res.post_view.post.body}
/> />

View file

@ -466,6 +466,10 @@ export class Search extends Component<any, SearchState> {
<HtmlTags <HtmlTags
title={this.documentTitle} title={this.documentTitle}
path={this.context.router.route.match.url} path={this.context.router.route.match.url}
canonicalPath={
this.context.router.route.match.url +
this.context.router.route.location.search
}
/> />
<h1 className="h4 mb-4">{I18NextService.i18n.t("search")}</h1> <h1 className="h4 mb-4">{I18NextService.i18n.t("search")}</h1>
{this.selects} {this.selects}