X card tester

Test a link’s X card: its twitter: tags, its image, and for a player card whether the player route lets X frame it. Or make the player card tags to paste.

More checksUtilitiesDomain and email

Or make the tags

The answer for allbirds.com

allbirds.com1 thing to fix before it is posted

allbirds.comThe World’s Most Comfortable Shoes

A neutral post drawn by clickd, not X’s interface. An image card has its image and title and no frame.
  • twitter:cardsummary_large_image
  • twitter:siteNot set
  • twitter:titleThe World’s Most Comfortable Shoes
  • twitter:descriptionThe world’s most comfortable shoes, made with natural materials like merino wool, eucalyptus tree fiber, and sugar cane, Allbirds has created the comfiest shoes on the planet.
  • twitter:imagehttp://www.allbirds.com/cdn/shop/files/logo-seo.jpg?v=1753720776From og:image. Loads, 1200 by 630, JPEG, 21 KB
  • MissingNo twitter:site. X’s markup lists the @username of the site, or its twitter:site:id, as required.
  • Image cardA large image card. X shows no frame for it: a page runs inside a post only under twitter:card player.
  • From og:imageNo twitter:image, so X falls back to og:image, as its markup says it does.

What X’s crawler is served

clickd fetched this page under its own name, with robots.txt obeyed, and not as X’s crawler. A CDN, an edge worker or bot protection often answers social crawlers with a card of their own, so X may be served something else. Run these on your own machine: the first should print the card tags with one twitter:card, the second the frame-ancestors rule and no X-Frame-Options.

Fetch it as Twitterbot, from a terminal
curl -s -A "Twitterbot/1.0" 'https://www.allbirds.com/' | grep -o '<meta name="twitter:[^>]*>'
curl -s -o /dev/null -D /dev/stdout -A "Twitterbot/1.0" 'https://www.allbirds.com/' | grep -i 'content-security\|x-frame'

X keeps the card it built for an address and reads the tags again roughly every seven days, its troubleshooting guide says. A link posted while something here was wrong may keep the wrong card, so post the fixed page at a new address. The page inside the frame is fetched fresh each time.

Make a page of your own a livecard with your agent: the Livecards skill. Or make one on clickd with no code: the livecard builder. The guide to livecards explains each step.

That was one page of allbirds.com.clickd reads its first 100 pages against one rulebook and ranks every fix by what it is worth. Free, about a minute.
Read the whole site
A player card X can frameExample
twitter:player · 1280 × 720

example.comA roof repair, start to finish

twitter:card
player
twitter:player
https://example.com/embed/roof-tour
twitter:player:width
1280
twitter:player:height
720
twitter:image
https://example.com/share/roof-tour.png

The player is on https with its size given, a still image stands in until it plays, and the player route’s headers let X put it in a frame.

What does it check?

Rules from the rulebook, and how many of the sites clickd has read miss each.

  1. Set a share imageSet og:image so links to the page carry a picture.
    70%of sites miss it

Questions

Is there still an official Twitter card validator?

No. X retired its card validator in 2022. Posting the link, or a tester like this one, is how to see what X will show.

Why does X show no card for my link?

The usual causes are robots.txt keeping Twitterbot out, a missing twitter:card or og:image, or an image X cannot fetch. The tester checks each in that order.

What does a player card need?

twitter:card set to player, a player address on https, its width and height, and a player route whose headers let X frame it.