See which Twitter card tags a page sets, which ones X will borrow from your Open Graph tags instead, and which are missing outright. One fetch of the page, one row per tag, and the line to add when there is no card type at all.
6 tags, one URL. One GET of the page as VerandBot/1.0, redirects followed, 12 second timeout, the served HTML only. Every <meta> tag is read, written with name= or property=, and the first value of each key is kept. For twitter:card, title, description, image, site and creator we report the tag, the og:* tag X documents as its stand-in, or nothing.
A fail is no twitter:card, a card type X does not document, no title or no image in either set, or an SVG image, which X does not support. Fallback means the twitter tag is absent and the og tag X reads in its place is there: that works, so it is not a fail. Review covers the optional attribution tags, a title over 70 or a description over 200 characters (the maximums in X's markup reference), and an image URL that is not absolute.
The rendered card: the OG Image Checker draws it. The image is not downloaded, so its size and dimensions are unchecked. We do not request the page as Twitterbot, so a robots.txt rule or a server that answers X's crawler differently is invisible. Tags added by JavaScript, or sitting past the first 100,000 characters of HTML, are not seen. With duplicates we keep the first value; X documents that the last twitter:card wins. X's own cache is out of reach.
One fetch, every meta tag, and one question per card tag: set here, borrowed from Open Graph, or missing. The card is the tool in motion on an example page, looped, and each step lights up while the card is doing it.
<meta name="twitter:card" content="summary_large_image">
The tool fetches the URL you typed as VerandBot, following redirects, giving up after twelve seconds. No JavaScript runs, so what it reads is the HTML any crawler receives on the first request, before scripts add anything.
Each <meta> element is read whether it names its key with name or property, because sites mix the two. Keys starting twitter: and og: are kept, first value first.
For the title, description and image, the tool asks what X asks: is the twitter tag there, and if not, is the Open Graph tag X falls back to? The two attribution handles have no Open Graph stand-in, and the card type only a conditional one, so those are read as set or not.
When there is no card type, the card offers the one tag that sets it, choosing the large-image layout when the page has an image to fill it. The line is written here from the page's own tags; the endpoint returns the tags, not a fix.
Paste a link into a post on X and a box appears under it with a picture, a headline and a line of text. That box is built from a handful of meta tags in your page's head, or, when those are missing, from tags you wrote for someone else. Here is how X decides what goes in it.
A Twitter card, still called that in X's own documentation, is the link preview X attaches to a post that contains a URL. When the link is first shared, X's crawler, which identifies itself as Twitterbot, fetches the page and reads the meta tags in its <head>. Those tags name the layout, the headline, the summary and the image. If they are right, the post carries a clickable card; if they are wrong or absent, it carries whatever X could assemble, which may be a bare link.
The tags are ordinary meta elements with a twitter: prefix, written with a name attribute:
<!-- inside <head> -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@yourfirm">
<meta name="twitter:title" content="Estate Planning, Explained">
<meta name="twitter:description" content="What a will covers, and what it does not.">
<meta name="twitter:image" content="https://yourfirm.com/img/estate.jpg">
For years the standard way to check those tags was Twitter's Card Validator, which drew the card for any URL. In August 2022 Twitter posted a notice on its developer forum saying it had removed the preview from the Card Validator, because the previews were not always aligned with how cards actually displayed across platforms. The notice pointed people to the post composer instead: start a new post, paste the link, and the card renders without posting. At the time, the validator page stayed up for submitting new domains and reading its logs. Reports differ on what that page does today, so we will not describe it; the advice in X's notice is the composer.
That leaves two separate questions, and this page answers the first. Are the tags on the page correct and complete? That is a question about your HTML, and a tag check answers it the same way every time. What does the card look like right now? That depends on X's current layout and its cache, and only the composer shows it exactly. For an approximation of the card itself, the OG Image Checker draws it.
X's markup reference lists every card tag with the Open Graph property it falls back to. The rule, in X's words, is that the card processor "first checks for the Twitter-specific property, and if not present, falls back to the supported Open Graph property." So a page with good og:* tags does not need to repeat them. These are the six tags this checker reads:
| Tag | What X uses it for | Falls back to |
|---|---|---|
| twitter:card | The layout: summary, summary_large_image, app or player. One per page. | A summary card may be built from og:type, og:title and og:description |
| twitter:title | The headline. The reference gives a 70 character maximum. | og:title |
| twitter:description | The summary line. 200 characters maximum. X's docs say its apps do not display it and the web version does. | og:description |
| twitter:image | The picture. Under 5MB; JPG, PNG, WEBP or GIF. SVG is not supported. | og:image |
| twitter:site | The @handle of the site, shown as attribution. | Nothing |
| twitter:creator | The @handle of the author. | Nothing |
Two details in that table do most of the damage. The card type has only a conditional fallback: X says a summary card "may be rendered" when og:type, og:title and og:description exist, which means a page with no twitter:card gets the small layout at best, however good its image is. And the attribution handles have no fallback at all, so a firm that wants its account named on every share has to write them out. X's pages disagree with each other on twitter:site: the card pages call it optional, the markup reference says it is required. This checker marks a missing handle for review rather than as a fail.
Almost every article page wants one of two layouts. summary puts a small square thumbnail beside the title; X crops the image to a square on every platform, and its docs give a 1:1 aspect ratio with a 144 by 144 pixel minimum. summary_large_image puts a wide image above the title; the docs give a 2:1 aspect ratio, a 300 by 157 pixel minimum and a 4096 by 4096 maximum. Both layouts take the same title, description and image tags. The choice is the one line only you can make, which is why it is the one line with no dependable fallback.
Pick the large layout when the page has an image made for it, and the small one when all you have is a logo. X's own guidance is blunt on this point: use a unique image representing the page, not a generic one such as a site logo or an author photo that appears on every page.
X caches card data. Its getting-started guide says content is cached for 7 days after a link with card markup is first posted, and the 2022 notice repeats that card data is cached for up to 7 days before it is refreshed. The notice also mentions adding a unique parameter to the URL as a hint to the crawler to revisit, with a delay before new tags appear on X. So if you correct a headline in your tags, the old card can keep appearing on shares of that URL for up to a week.
For most sites that is a nuisance. For a regulated firm it is a different kind of problem. The card is a headline and a summary on a public feed, attached to your name, and anyone can repost it. If the title that went out overstated a return, a result or a credential, correcting the page does not immediately correct the card. The practical answer is to treat card text as marketing copy that gets reviewed before the first share, the same as the page it points to, rather than something to fix afterwards. This checker shows you exactly which text X will use, including text borrowed from your Open Graph tags, so it can be read before it goes out.
A card image fails more often than a card title, and usually for reasons that have nothing to do with the tag. The URL should be absolute, with the scheme and host written out; a relative path such as /img/card.jpg gives the crawler nothing to resolve against. The image has to be publicly reachable: behind a login, a hotlink block or a firewall rule, it will not load. And X's crawler respects robots.txt. The getting-started guide says that if a page with card markup is blocked, no card is shown, and if the image URL is blocked, no image is shown. A site that disallows everything except named search crawlers can switch its own cards off without meaning to; the Robots.txt Checker reads that file.
property, and its docs write twitter tags with name. Verand's site audit looks for name="twitter:card", and this checker tells you when it found the tag the other way.For an article: a twitter:card of summary_large_image, a twitter:site handle for the firm and a twitter:creator handle for the author, and complete Open Graph tags carrying the title, description and a unique absolute image URL that X can read by fallback. Add twitter:title or twitter:description only when you want X to say something different from every other platform. Then check the page with this tool, paste the link into the composer, and do it before the first share rather than after.
Six things that are true of this tool, each one backed by a line in the code that runs it.
The request carries a URL and nothing else. There is no account, no session and no database behind the tool, so there is nothing for us to keep about you.
The response carries every twitter:* and og:* value on the page, so each card tag shows what X will actually read: your twitter tag, the Open Graph tag standing in for it, or nothing.
The tags are read by a fixed pattern from the served HTML. No model reads the page, so the same HTML gives the same answer every time.
The missing-card flag is the same check Verand's deep crawl runs on every page of every customer site, called directly through the product's page audit. The per-tag values come from a reader written for this tool.
No rendered card, no image download, no request as Twitterbot, no view of X's cache. The card says so beside the result rather than in a footnote, and points to the tools that cover the gaps.
Each run is one page fetch, so it costs nothing and is never metered. The one limit is a courtesy to the sites being fetched: 20 checks a minute per visitor.
The old validator, the tags a page needs, the fallback, the cache and the image.
In August 2022 Twitter announced on its developer forum that it had removed the preview from the Card Validator, saying the previews did not always match how cards displayed across platforms. It pointed people to the post composer instead: paste the link into a new post and the card renders without posting. The notice said the validator page stayed available for submitting new domains and reading its logs. This checker does not reproduce X's preview; it reads the tags X builds the card from and tells you which ones it will use.
At minimum twitter:card, which sets the layout and has no dependable fallback, plus a title and an image. The title and image can come from twitter:title and twitter:image or, when those are absent, from og:title and og:image, which X reads in their place. twitter:description is optional and falls back to og:description. twitter:site and twitter:creator name the firm's and the author's X accounts; they have no fallback, so write them out if you want attribution.
The layout. summary shows a small square thumbnail beside the title, cropped to 1:1, with a 144 by 144 pixel minimum in X's docs. summary_large_image shows a wide image above the title, with a 2:1 aspect ratio and a 300 by 157 pixel minimum. Both use the same title, description and image tags. Use the large layout when the page has an image made for it, and summary when the only image is a logo.
Yes, tag by tag. X's documentation says its card processor checks for the Twitter-specific property first and falls back to the Open Graph one: og:title for the title, og:description for the description, og:image for the image and og:image:alt for the image's alt text. The card type is the exception. X says a summary card may be rendered when og:type, og:title and og:description exist and twitter:card is absent, so without the tag you get the small layout at best. The handles in twitter:site and twitter:creator have no Open Graph equivalent.
Because X caches card data. Its documentation says content is cached for 7 days after a link with card markup is posted, and its 2022 notice says card data is cached for up to 7 days before it is refreshed. The same notice mentions adding a unique parameter to the URL as a hint for the crawler to revisit, with a delay before the new tags show. Run this checker first to confirm the page itself now carries the right tags; if it does, the old card is X's cache, not your HTML.
X's docs give a 2:1 aspect ratio for summary_large_image, from 300 by 157 pixels up to 4096 by 4096, and a 1:1 ratio for summary, from 144 by 144, cropped to a square. On both, the image must be under 5MB and in JPG, PNG, WEBP or GIF format; only the first frame of a GIF is used and SVG is not supported. This checker reads the image URL and flags an SVG or a relative path, but it does not download the image, so it cannot confirm the size.
A correct card gets the click; the page has to earn what comes after it. Verand writes articles from your own expertise and credentials, so both Google and the AI assistants have something of yours to name. It then tracks where you rank and where ChatGPT, Gemini, Perplexity, Claude and Google's AI answers mention you, and gates every draft so a claim your regulator would not allow never publishes.
Content built to rank in
Google and get cited by
ChatGPT
Perplexity
Gemini
Claude, with every claim checked before it goes live.