Lucis
Posted on December 4, 2019
So, my day as a web developer today was described by this image:
As it may not be so easy to understand, I was testing the link preview feature of Whatsapp for a website I've been developing. Being a real fan of using the preview (and waiting a couple of seconds after I paste some article's URL on my IM's), I was very determined to make it work for this site in particular, but for some reason unknown to me it was not. I was adding the correct meta
tags using OpenGraph and it was working flawlessly on Facebook, Twitter, and Telegram. But not Whatsapp.
I've searched everywhere for this problem: SOF, react-helmet
's Github, Gatsby.js community... And every little thing I would change, trying to make it work, would need another deploy so it took a while. After a lot of "solutions" that included changing the image dimensions, adding a second tag and making the title a bit shorter, I've come across a tiny SOF comment that didn't have any upvote and would comment about WhatsApp not liking style tags before the meta tags. At first I didn't give it any credit, as it was improbable and difficult to try, since Gatsby is the one that builds the final index.html
.
But eventually, after a lot of frustration, I had to try this last solution. This time, I changed the built code produced by Gatsby putting the meta
tags just after the beginning of the head
section. Deployed the files to a temporary now.sh site and gave it a try. It worked.
I was just as happy as I was shocked. This is the kind of implementation detail that you SHOULD disclose to developers.
After all, it was the tachyons library that I've included directly on my custom CSS and it took some space. After removing it and replacing it by a CDN, it started working. It's valid to say that after removing tachyons, some other CSS was still included before the meta
tags, so the problem was actually the size of the CSS inside the style tag.
edit: Vitor Oliveira has pointed out another great way of solving this problem: Sorting the head tags with the meta
data first. For this, you need to edit (or add) a gatsby-ssr.js
exporting the following function:
export const onPreRenderHTML = ({ getHeadComponents, replaceHeadComponents }) => {
const headComponents = getHeadComponents();
headComponents.sort((a, b) => {
if (a.type === 'meta') {
return -1;
} else if (b.type === 'meta') {
return 1;
}
return 0;
});
replaceHeadComponents(headComponents);
};
Posted on December 4, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.