My website How do I get the thumbnails to show up when the article links are shared on Lemmy? I tried metatags, changing the aspect ratio and the image format. Nothing seems to work. Here are some of the failed results.: !theglitch@lemmy.dbzer0.com Any help would be appreciated.
Article.tsx:
import React, {useEffect, useState, useContext } from "react"
import { useParams, Link, useNavigate } from "react-router-dom"
import { articlesData } from "../data/articles"
import { styled } from "styled-components"
import MetaTags from "../utils/MetaTags"
import CopyLinkIconDark from "/src/assets/copyLinkDark.svg"
import CopyLinkIconLight from "/src/assets/copyLinkLight.svg"
import FacebookShareIconDark from "/src/assets/facebookShareDark.svg"
import FacebookShareIconLight from "/src/assets/facebookShareLight.svg"
import TwitterShareIconDark from "/src/assets/twitterShareDark.svg"
import TwitterShareIconLight from "/src/assets/twitterShareLight.svg"
import ThemeContext from "../utils/ThemeContext"
import formatDate from "../utils/formatDate"
type articlesData = {
id: number;
articleUrl: string;
category: string;
img: string;
alt: string;
header: string;
subhead: string;
author: string;
datePublished: Date;
articleBody: string[];
}
const StyledHeroWrapper = styled.div`
position: relative;
`
const StyledLogo = styled.h2`
position: absolute;
font-size: 4rem;
text-shadow: ${({ theme }) => theme.isDarkMode ? "1px 1px 5px rgba(0, 0, 0, 0.5)" : "1px 1px 5px rgba(255, 255, 255, 0.5)"};
top: -6.3rem;
left: -1rem;
`
const StyledImg = styled.img`
max-width: 100%;
margin: 0;
border-radius: 5px;
object-fit: cover;
`
const StyledHeadline = styled.h1`
font-family: "Fjalla One", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 3rem;
letter-spacing: -0.05em;
transform: tranlateY(-20%);
max-width: 90%;
word-spacing: -0.05em;
line-height: 3.4rem;
margin: 0;
`
const StyledSubhead = styled.h3`
font-family: "Source Serif 4", serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
font-size: 1.5rem;
letter-spacing: -0.05em;
word-spacing: -0.05em;
margin: 0;
line-height: 1.5rem;
`
const StyledArticleInfo = styled.p`
font-family: "Open Sans", sans-serif;
font-optical-sizing: auto;
font-weight: 300;
font-style: normal;
font-variation-settings:
"wdth" 100;
text-transform: uppercase;
`
const StyledAuthor = styled(Link)`
color: ${({ theme }) => theme.isDarkMode ? "#9CE00C" : "#5200FF"};
margin-right: 1rem;
text-decoration: none;
&:hover {
background-color: ${({ theme }) => theme.isDarkMode ? "#5200FF" : "#9CE00C"};
}
`
const StyledButtonWrapper = styled.div`
display: flex;
`
const StyledShareButton = styled.button`
display: flex;
align-items: center;
justify-content: center;
width: 3rem;
height: 3rem;
border-radius: 50%;
background-color: ${({ theme }) => theme.isDarkMode ? "#353535" : "#cacaca"};
margin-right: 1rem;
border: none;
&:hover {
background-color: ${({ theme }) => theme.isDarkMode ? "#5200FF" : "#9CE00C"};
}
a {
width: 2rem;
height: 2rem;
display: flex;
align-items: center;
justify-content: center;
}
`
const StyledShareImgIcon = styled.img`
width: 2rem;
height: 2rem;
`
const StyledArticleBody = styled.p`
font-family: "Quattrocento", serif;
font-weight: 400;
font-style: normal;
font-size: 1.2rem
`
const copyLink = async () => {
try {
await navigator.clipboard.writeText(window.location.href);
alert('Link copied to clipboard!');
} catch (err) {
console.error(err);
alert('Failed to copy link to clipboard!');
}
}
const Article: React.FC = () => {
const { isDarkMode } = useContext(ThemeContext);
const {articleUrl} = useParams()
const [article, setArticle] = useState<articlesData | null>(null)
const [isLoading, setIsLoading] = useState(true)
useEffect(()=>{
const foundArticle = articlesData.find(articleObj => articleObj.articleUrl === articleUrl);
setArticle(foundArticle ? foundArticle : null);
setIsLoading(false)
},[])
const navigate = useNavigate()
let formattedDate = ""
if(article){
formattedDate = formatDate(article.datePublished)
}
useEffect(()=>{
if(!article && !isLoading) {
navigate('not-found')
}
}, [isLoading])
return (
<>
<MetaTags
title={article?.header || ""}
description={article?.subhead || ""}
imageUrl={article?.img || ""}
url={window.location.href}
/>
<main>
<StyledHeroWrapper>
<StyledLogo theme={{ isDarkMode }}>theGlitch</StyledLogo>
<StyledImg src={article?.img} alt={article?.alt}/>
</StyledHeroWrapper>
<StyledHeadline>{article?.header}<br/></StyledHeadline>
<StyledSubhead>{article?.subhead}</StyledSubhead>
<StyledArticleInfo>
<StyledAuthor
theme={{ isDarkMode }}
to={`/profiles`}
aria-label={`to profiles`}
>{article?.author}</StyledAuthor>
{formattedDate}
</StyledArticleInfo>
<StyledButtonWrapper>
<StyledShareButton onClick={copyLink} theme={{ isDarkMode }}>
<StyledShareImgIcon src={isDarkMode ? CopyLinkIconDark : CopyLinkIconLight} alt="copy link icon" />
</StyledShareButton>
<StyledShareButton theme={{ isDarkMode }}>
<a href={`https://www.facebook.com/sharer/sharer.php?u=https://theglitchnews.netlify.app/article/${article?.articleUrl}"e=${article?.header} | #theGlitch`} target="_blank" rel="noopener noreferrer">
<StyledShareImgIcon src={isDarkMode ? FacebookShareIconDark : FacebookShareIconLight} alt="facebook share icon"/>
</a>
</StyledShareButton>
<StyledShareButton theme={{ isDarkMode }}>
<a href={`https://twitter.com/share?text=${encodeURIComponent(article?.header + " | #theGlitch #tech")}&url=${encodeURIComponent("https://theglitchnews.netlify.app/article/" + article?.articleUrl)}`} target="_blank" rel="noopener noreferrer">
<StyledShareImgIcon src={isDarkMode ? TwitterShareIconDark : TwitterShareIconLight} />
</a>
</StyledShareButton>
</StyledButtonWrapper>
<article>
{article?.articleBody.map((paragraph, index)=><StyledArticleBody key={index}>{paragraph}</StyledArticleBody>)}
</article>
</main>
</>
)
}
export default Article
MetaTags.tsx:
import { Helmet } from 'react-helmet';
type MetaTagsProps = {
title: string;
description: string;
imageUrl: string;
url: string;
}
const MetaTags = ({title, description, imageUrl, url}: MetaTagsProps) => {
return (
<Helmet>
<title>theGlitch</title>
<meta name="description" content={description} />
{/* OpenGraph tags */}
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content={`https://theglitchnews.netlify.app${imageUrl}`} />
<meta property="og:url" content={url} />
{/* Twitter Card tags */}
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:creator" content="@EtAl19820625" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={`https://theglitchnews.netlify.app/${imageUrl}`} />
<meta name="twitter:url" content={url} />
</Helmet>
);
};
export default MetaTags;
For me, it was the episode when he had Tim Pool on with the Twitter executives. Pool was like "Twitter discriminates against conservatives" and Vijaya Gadde was like "Moderation is not discrimination". Rogan did realize his mistake five minutes into the episode, but he showed just how impressionable he was. The whole show lost the allure after that. There's a thin line between curious and gullible.