Job postings get shared a lot: recruiters post them on LinkedIn, teams drop them in Slack, friends forward them in messaging apps. Each share shows the page's og:image, and on most careers pages that is the company logo or a stock photo — the same image for every opening. A card with the job title, location and salary tells people what the link is before they click. With Shareglint that card comes from the posting's own data, for every job, without anyone designing it.
Templates for hiring
| Template | Use | Fields |
|---|---|---|
job-posting |
One opening: the share card for its page and post | title, company, location, salary, type, eyebrow, CTA, site, logo |
hiring-roles |
"We're hiring" posts listing up to four roles | title, company, four roles, location, CTA, site, logo |
new-hire |
Welcoming someone to the team | name, role, team, date, photo, logo |
career-new-role |
An employee's new-role announcement | new title, name, company, previous title, start date, photo, company logo |
team-grid |
The team behind the openings | title, up to eight names, roles and photos, logo |
All render in every size preset (og 1200×630, square 1080×1080, portrait 1080×1350, story 1080×1920, pinterest 1000×1500, youtube 1280×720) and take accent and theme; the careers category of the gallery shows them.
A card in every job page's og:image
For a job board or careers site, the cleanest route is a signed URL in the job page template: the page computes the image URL from the job's fields, signed with your secret, and the image renders the first time LinkedIn or Slack fetches it (signed image URLs):
<meta property="og:image" content="https://shareglint.com/i/acc_…/job-posting.png?title=Senior%20Backend%20Engineer&company=Northwind&location=Remote%20(EU)&salary=%E2%82%AC80k%E2%80%93100k&type=Full-time&s=…">
No API call at publish time, nothing rendered for jobs nobody shares, and a job whose title or salary changes gets a new image because its values changed. On a board with thousands of postings, this costs renders only for the ones that are shared. The Open Graph image guide covers the other tags and how each network reads them.
A multi-employer board passes each employer's logo and accent colour with the posting, so every company's jobs look like that company — one template, many brands.
"We're hiring" posts
For social, render the open roles from your ATS export or careers page data:
curl -X POST "https://shareglint.com/v1/images?wait=true" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"template": "hiring-roles",
"sizes": ["square", "og"],
"modifications": {
"title": "We are hiring",
"company": "Northwind",
"role_1": "Senior Backend Engineer",
"role_2": "Product Designer",
"role_3": "Customer Success Lead",
"location": "Remote in the EU",
"cta": "Apply at northwind.dev/jobs"
}
}'
The square image is for LinkedIn and Instagram feeds, the 1.91:1 for posts with a link. For one card per opening, send the open roles as a CSV batch to job-posting; rows per batch by plan: Free 50, Starter 500, Pro 1,000, Scale 2,000, Business 5,000. An automation tool can render a card whenever a new job is published in your ATS or careers spreadsheet (integrations).
Google for Jobs is a different channel
Google's job search does not use og:image. It reads the JobPosting structured data on the page, and the logo it shows comes from hiringOrganization.logo; Google's documentation also says the logo's width-to-height ratio must be between 0.75 and 2.5 (Google Search Central). Keep both: structured data with a proper logo for Google, a generated card in og:image for every place the link is shared.
What to put on the card
- Title and location first. They decide whether the right person clicks. "Remote" needs a region or time zone more often than not.
- Salary if you publish it. Many job seekers look for it first, and in some places pay transparency rules require it in the posting; the card is generated from the same data, so it cannot disagree with the posting.
- Type and seniority in the eyebrow or
typefield: full-time, contract, senior. - Your logo, not a stock photo of people at laptops.
Long titles shrink to fit their box, but titles like "Senior Staff Software Engineer, Platform Infrastructure (Remote)" read better shortened on the card and in full on the page.
For job boards with many employers
A board that lists thousands of jobs from many companies has two extra concerns. Branding: each employer's logo and colour come with the posting, so one template serves every brand, and employers on a premium listing can get their own copy of the template. Volume: because a signed URL renders only when a link is shared, the cost follows sharing, not the size of the index. Expired postings keep their images at the same URL for your plan's retention period, after which a new share simply renders the card again.
Announcements around hiring
New hires and new roles are part of the employer brand: new-hire welcomes someone, career-new-role celebrates an internal promotion. Ask the person before posting their photo, and keep the tone theirs.
Cost
One render per image and size; repeats are free. A careers page with 30 open roles, each shared now and then, renders about 30 cards; a weekly "we're hiring" post in two sizes adds about 9 a month. A board with thousands of postings pays only for those shared. The Free plan's 100 renders carry a watermark; Starter is $9 a month for 2,000 renders (pricing).
What it does not do
- No ATS or job board integration; job data comes from your page templates, exports or automations.
- No posting to LinkedIn or job boards; the image is a URL your page or scheduler uses.
- It does not write job descriptions or check them; the card shows the fields you send.
LinkedIn's own help explains how it builds link previews from a page (LinkedIn Help); if a preview shows an old image after you changed the card, its Post Inspector refreshes it.