Branded SERP CTR Fix — 2026-05-07
Source action item: #1 in the 2026-05-07 Web Health & Growth Report — "Fix branded SERP CTR for 'jod'".
Plugin used:
seo-geo-claude-skills(build/seo-content-writer,build/meta-tags-optimizer,build/schema-markup-generator,cross-cutting/entity-optimizer,optimize/on-page-seo-auditor,build/geo-content-optimizer).
TL;DR
- The brand query "jod" gets 7,657 monthly Google impressions but only 2.3% CTR (expected 5%+ at position 7). That's the headline problem.
- The root cause is not title-text alone — it is entity ambiguity: Google has no canonical Knowledge Graph entity for "Jod", so the SERP fragments brand authority across 5+ pages of
jodapp.comand thegig.jodapp.comsubdomain. Plugin (entity-optimizer/SKILL.md) reframed this from a copy problem to an entity-resolution problem. - 7 critical P0 bugs were found that block the work — including a
/sign-updescription that's leftover boilerplate from a different product entirely ("dead simple appointment and scheduling app"), a malformed<meta>tag on/login, and a grammar error in the homepage description. Fix these this week regardless of SEO. - No JSON-LD anywhere except job detail pages. No
Organization, noWebSite, noLocalBusiness, noFAQPage.app/root.jsxis empty of structured data. - 11 of 13 pages have no OG/Twitter tags — every WhatsApp/LinkedIn share produces an empty preview. Critical for an audience that shares jobs in chat (100+ social_share sessions/month per the 2026-05-07 report).
- The
/aboutpage is wasting trust queries — "what is jod" (40 imp/0 clicks), "is jod legit", "jod company", "jod meaning". Current description is mission-statement boilerplate that answers none of them. - Expected timeline: P0 bugs this week. Schemas + page-by-page rewrites over 4-6 weeks. Brand entity authority work (Wikidata + Knowledge Panel target) over 3-6 months.
- Expected impact (per
entity-optimizer/SKILL.md): "jod" CTR should move 2.6% → 3.5-4% in month 1 (schema + content), → 5-7% in months 2-3 (entity authority + press), → 7-15% in months 4-6 (Knowledge Panel candidate). 1,000-2,500 extra branded clicks per month at maturity.
Why this matters
From the 2026-05-07 Web Health & Growth Report:
| Headline data | Value | Source |
|---|---|---|
| "jod" monthly Google impressions | 7,657 | GSC §2.1 |
| "jod" monthly clicks | 179 | GSC §2.1 |
| "jod" CTR | 2.3% (expected 5%+ at pos 7) | GSC §2.1 |
| "jod" CTR previous period | 2.8% (declining) | GSC §2.1 |
| Brand search clicks growth (QoQ) | +25% (143 → 179) | TL;DR finding |
| Brand search impression growth (QoQ) | +48% (5,186 → 7,657) | GSC §2.1 |
The brand demand is growing — and we are losing the click on our own SERP. The 25% QoQ growth in branded search is unprompted (no Google Ads in this measurement; GSC excludes paid). People are searching "jod" because they remember the name. Then they don't click our result.
Trust-query gap on /about
A pattern that the original action-item scope missed but this work expands:
| GSC query (last 28 days) | Impressions | Clicks | Page |
|---|---|---|---|
| "what is jod" | 40 | 0 | /about |
| "what is a jod" | 11 | 0 | /about |
| "is jod legit" | 1 | 0 | /about |
| "jod company" | 3 | 0 | /about |
| "jod meaning" | 2 | 0 | /about |
| "jod official website" | 2 | 0 | /about |
| "whats jod" | 6 | 0 | /about |
| "jod singapore" | 23 | 0 | /about |
/about ranks for ~88 trust-related impressions/month and earns zero clicks. The current /about description is "Empowering the world's next billion workers..." — mission-statement boilerplate that answers none of these queries. /about rewrites are now in scope for action item #1, even though the original wording focused on the homepage.
In-site search reveals user mental model
From GA4 view_search_results events (last 28 days, top 30 of 164 unique terms):
- By employer: NTUC (22), FairPrice (17 across casing), Seonggong (9), McDonald's (4), Mercuria (3), Four Points (3)
- By role: Cleaner, Driver, Waiter, Packer, Kitchen, Janitor, Nursing, Pizza, Retail Sales, Accountant
- By category: Food & Beverage (11), Part-Time Chef/Cook, Housekeeping
Users search by employer brand → role → category. Page copy + meta should mirror this hierarchy.
Critical P0 bugs — fix this week regardless of SEO
These are quality bugs found during the audit. None of the SEO work makes sense if these remain.
| # | Bug | File | Why it matters |
|---|---|---|---|
| 1 | /sign-up description is from a different product: "Sign up for an account for dead simple appointment and scheduling app." | app/routes/identities-user/identities-user-sign-up-page.jsx:14-17 | Page ranks position 1.5 for "jod" (282 imp) but converts at 0.71% CTR because of this. Replacing the description should lift CTR to 15%+ — single biggest leverage on the site. |
| 2 | /login malformed <meta> tag: name="Login" (capital L, invalid) with content "Create your account today!" (sign-up copy on a login page) | app/routes/login-page.jsx:14-19 | Google likely ignores the description entirely. The page has effectively no description meta. |
| 3 | Homepage description grammar: "Jod helps blue-collar workers with find jobs in Singapore" ("with find" is wrong) | app/routes/home.jsx:19-27 | Signals low quality to Google's quality models. Visible in every SERP snippet for "jod". |
| 4 | /employers title and description use U+2011 non-breaking hyphens (Full‑Time, Blue‑Collar) instead of regular U+002D | app/routes/org/org-home-page.jsx:5-15 | Visually identical, but a different unicode character — may affect keyword matching in Google's tokeniser. |
| 5 | /jobs/mcdonalds is missing <meta name="twitter:card" content="summary_large_image"> | app/routes/jobs/jobs-mcdonald-page.jsx:19-81 | Without it, Twitter/X downgrades the existing twitter:image to a tiny summary card. The 1200x630 image is wasted. |
| 6 | /how-it-works has no body text — only a YouTube iframe | app/routes/how-it-works-page.jsx:9-10 | Page ranks position 5 for "jod" (1,212 imp) at 0.58% CTR — biggest CTR waste on the site. Crawlers see no indexable text. |
| 7 | /sign-up has no <h1> (only an h2 "Create Account") | app/routes/identities-user/identities-user-sign-up-page.jsx | Header hierarchy violation. Plugin (on-page-seo-auditor/SKILL.md Step 4) flags this as a single-H1 rule violation. |
Total estimated effort: ~1 engineering day across all 7 bugs.
Brand entity authority playbook
Per
cross-cutting/entity-optimizer/SKILL.mdStep 1-3, applied to Jod.
This is the headline reframe from the plugin: the "jod" SERP problem is not a title-text problem; it is an entity-resolution problem. Google does not have a canonical Knowledge Graph entity for "Jod", so brand authority fragments. Below is the framework to fix it.
Phase 0 — Run the AI Entity Resolution Test (this week)
Per entity-optimizer/SKILL.md Step 1. Run these queries in each AI system and record the answer verbatim:
| Query | ChatGPT | Claude | Perplexity | Google AI Overview |
|---|---|---|---|---|
| "What is Jod?" | ? | ? | ? | ? |
| "Is Jod legit?" | ? | ? | ? | ? |
| "Who founded Jod?" | ? | ? | ? | ? |
| "Jod vs FastJobs" (or top SG competitor) | ? | ? | ? | ? |
| "Best jobs app in Singapore for blue-collar workers" | ? | ? | ? | ? |
Record:
- Does each system describe Jod accurately?
- Does each system cite jodapp.com as a source?
- Does each system confuse Jod with the Hebrew letter "jod" or the Dutch word "jod"?
If any system returns "I don't know" or describes Jod incorrectly, that is the entity gap to fix.
Phase 1 — Foundation (Weeks 1-2)
Per entity-optimizer/SKILL.md Step 2 Category 1 (Structured Data) and Category 2 (Knowledge Bases):
-
Deploy the global
Organization+WebSite+MobileApplicationschemas toapp/root.jsx(provided in Global JSON-LD below). Use one canonical@id:https://jodapp.com/#organization. -
Create a Wikidata entry for Jod. Required properties: instance of (Q4830453 business enterprise), country (Q334 Singapore), inception (founding year), official website, founder, headquarters location. This single action is the highest-leverage entity move.
-
Submit Jod to industry directories: CrunchBase, LinkedIn Company, Singapore Tech directories, MOM EA Licence directory (if applicable), e27, Tech in Asia.
-
Standardise NAP+E (Name + Address + Phone + Email) across:
- jodapp.com (homepage, /about, /contact)
- Google Business Profile
- LinkedIn Company page
- Facebook page
- Crunchbase
- Wikidata
- Bing Places
- Apple Maps Connect
The plugin requires identical formatting (e.g., always "+65 6XXX XXXX" or always "+65-6XXX-XXXX" — pick one and never deviate).
Phase 2 — Content (Month 1)
Per entity-optimizer/SKILL.md Step 2 Category 4 (Content-Based Entity Signals):
- Rewrite
/aboutas the canonical entity page (see Per-page recommendations § Page 2 below) — definitional H1, founder bio, UEN, registration date, MOM/MAS references, named insurance underwriter. - Add a founder/leadership page at
/about/teamwith a dedicated Person schema for each leader. Include LinkedInsameAs. Per Step 2 Category 6 (AI-Specific Entity Signals — verifiable claims). - Add a
/newsor/presssection with at least 3 dated press mentions (Tech in Asia, e27, Channel News Asia, The Straits Times). If real press coverage doesn't exist, run a small PR push to seed it. Per Step 2 Category 5 (Third-Party Entity Signals). - Disambiguation paragraph on
/about: "Jod is the trade name of [legal entity], a Singapore-registered jobs platform. Not to be confused with 'jod' (the Hebrew letter) or other unrelated uses of the word."
Phase 3 — Authority (Months 2-3)
- Get Jod cited in third-party content:
- Reach out to Tech in Asia / e27 / The Straits Times for an editorial feature
- Get listed in "Best jobs apps in Singapore" listicles (existing ones — outreach to publishers)
- Get reviews on Google Business Profile, Trustpilot, Glassdoor (employer reviews)
- Wikipedia article candidacy (only when notable enough — typically requires 3+ independent press features).
- Claim and verify Google Business Profile for the Singapore office address. This unlocks a Knowledge Panel candidate slot.
- Add
sameAslinks to all owned social, directory, and knowledge-base profiles in the canonicalOrganizationschema.
Phase 4 — Monitoring (Ongoing)
- Re-run the AI Entity Resolution Test monthly. Record changes.
- Monitor Google Search Console for impressions on "jod", "jod singapore", "jod app", "what is jod" — CTR should rise as the entity layer strengthens.
- Monitor Google Knowledge Graph API for the Jod entity ID emergence.
- Watch for incorrect Knowledge Panel attributions (e.g., Jod confused with another company). Use Google's "Suggest an edit" feature on any Knowledge Panel that appears.
Expected timeline
| Phase | Expected "jod" CTR | What unlocks it |
|---|---|---|
| Baseline (today) | 2.6% | Position 7 with no entity signals |
| Weeks 1-2 (foundation) | 2.6% (flat — re-crawl lag) | Schema deployed, Wikidata seeded |
| Month 1 | 3.5-4% | Homepage description matches intent, Wikidata signals reach Google |
| Months 2-3 | 5-7% | Industry baseline for branded position 7 with full entity signals |
| Months 4-6 | 7-15% | Knowledge Panel candidate — position 1 with KP typically 30%+ CTR |
Global JSON-LD for app/root.jsx
Per
build/schema-markup-generator/SKILL.mdStep 1 (content-type mapping → Organization + WebSite for site root) and Step 2 (visible-content alignment).
This is the single highest-leverage code change. It enables Google's Sitelinks search box on the "jod" SERP and gives Google the entity definition for Jod.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://jodapp.com/#organization",
"name": "Jod",
"legalName": "[fill in legal entity name]",
"alternateName": ["Jod Singapore", "Jod App", "Jodapp"],
"url": "https://jodapp.com",
"logo": {
"@type": "ImageObject",
"@id": "https://jodapp.com/#logo",
"url": "https://jodapp.com/logo.png",
"width": 512,
"height": 512,
"caption": "Jod"
},
"image": { "@id": "https://jodapp.com/#logo" },
"description": "Jod is a Singapore jobs app for blue-collar workers. F&B, retail, cleaning, security, logistics, and warehouse jobs with daily pay and free worker insurance underwritten by Etiqa.",
"slogan": "Work today, get paid tomorrow.",
"foundingDate": "[YYYY-MM-DD]",
"founder": {
"@type": "Person",
"name": "[founder name]",
"url": "https://jodapp.com/about"
},
"numberOfEmployees": { "@type": "QuantitativeValue", "value": "[n]" },
"identifier": [
{
"@type": "PropertyValue",
"propertyID": "UEN",
"value": "[Singapore UEN]"
}
],
"knowsAbout": [
"blue-collar jobs Singapore",
"F&B jobs Singapore",
"retail jobs Singapore",
"cleaning jobs Singapore",
"warehouse jobs Singapore",
"worker insurance Singapore",
"MOM employment Singapore"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "[fill in]",
"addressLocality": "Singapore",
"postalCode": "[fill in]",
"addressCountry": "SG"
},
"areaServed": { "@type": "Country", "name": "Singapore" },
"sameAs": [
"https://www.linkedin.com/company/jodapp",
"https://www.facebook.com/jodapp",
"https://www.instagram.com/jodapp",
"https://www.crunchbase.com/organization/jodapp",
"https://www.wikidata.org/wiki/[QID once created]"
],
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+65-XXXX-XXXX",
"contactType": "customer support",
"areaServed": "SG",
"availableLanguage": ["English", "Bengali", "Tamil", "Bahasa Indonesia"]
}
},
{
"@type": "WebSite",
"@id": "https://jodapp.com/#website",
"url": "https://jodapp.com",
"name": "Jod",
"alternateName": "Jod Singapore",
"publisher": { "@id": "https://jodapp.com/#organization" },
"inLanguage": "en-SG",
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://jodapp.com/jobs?query={search_term_string}"
},
"query-input": "required name=search_term_string"
}
},
{
"@type": "MobileApplication",
"@id": "https://jodapp.com/#app",
"name": "Jod",
"operatingSystem": "ANDROID, IOS",
"applicationCategory": "BusinessApplication",
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "SGD" },
"publisher": { "@id": "https://jodapp.com/#organization" }
}
]
}
Validation step (per schema-markup-generator/SKILL.md Step 3): paste the rendered output into Schema.org Validator AND Google Rich Results Test before merging. Both must pass with zero errors.
Visible-content alignment: every claim in the JSON-LD must be visibly present on the page. The legalName, foundingDate, UEN, address, founder name must all appear in human-readable text on /about (or homepage trust strip) — otherwise Google may suppress the rich result.
Brand consistency decision required
Before any title rewrites land, Marketing must pick one canonical brand string and Engineering must apply it consistently. Today the codebase uses:
- "Jod"
- "Jod Board" (homepage,
/jobs) - "JodCareers"
- "JodGig"
- "JodRewards"
Proposed canonical decision:
| Surface | Canonical string |
|---|---|
Page titles (HTML <title>) | Jod |
| Title suffix pattern | `... |
| Brand programme names | JodRewards (one word, capitalised), Jod Campaigns (two words for /bonuses) |
| Marketing copy | Jod |
| Drop entirely | Jod Board, JodCareers, JodGig (these dilute the brand entity per entity-optimizer/SKILL.md Step 2 Category 3 — NAP+E consistency) |
Owner: Marketing Head sign-off. Effort: 30 minutes (decision) + ~2 engineering hours (find/replace across meta exports).
Per-page recommendations
Per
build/seo-content-writer/SKILL.md9-step workflow +build/meta-tags-optimizer/SKILL.md6-step workflow +build/geo-content-optimizer/SKILL.md5-step GEO workflow.
For each of the 13 pages: two title/meta options (one entity-anchored, one click-driven), a content audit with 3-7 changes, and JSON-LD recommendations. All titles re-checked for pixel width, not just character count (per meta-tags-optimizer/SKILL.md Step 2).
Page 1: Homepage /
Current: Title "Jod Board - Part-time, Gig & Blue Collar Jobs in Singapore". Description has grammar bug ("with find jobs"). H1 "Work today, get paid tomorrow.". No JSON-LD, no OG, no Twitter.
GSC: "jod" 167/6,463/pos 6.9/CTR 2.6% · "jod singapore" 32/172/pos 1.06/CTR 18.6% · "jod app" 18/214/pos 2.0/CTR 8.4%
Title and meta
Final A — entity-anchored (recommended primary)
- Title:
Jod Singapore — Daily Pay Jobs App for Blue-Collar Workers(58 chars, ~547px desktop, ~604px mobile) - Description:
Jod is the Singapore jobs app for F&B, retail, cleaning, security, and warehouse workers. Apply in minutes. Daily pay. Free worker insurance.(148 chars)
Why: per entity-optimizer/SKILL.md Step 2 Category 4, the homepage must open with a definitional sentence so Google can resolve the brand entity. The current title lacks a definition. "Singapore" right after "Jod" matches the high-CTR query "jod singapore" (18.6% CTR).
Final B — click-driven
- Title:
Jod — Find F&B, Retail & Warehouse Jobs in Singapore(53 chars) - Description:
Looking for a Singapore job? Jod connects you with verified employers hiring today. Daily pay, free insurance, MOM-licensed. Open the app and apply.(147 chars)
Why: question-led mobile descriptions lift CTR 8-15% on mobile (meta-tags-optimizer/SKILL.md reference). Use "MOM-licensed" only if Jod holds a real EA licence (CORE-EEAT R01 verifiability).
Content audit
- (P0) Fix grammar bug — "with find jobs" → "find jobs" in
app/routes/home.jsx:19-27. - GEO addition (per
geo-content-optimizer/SKILL.mdStep 3): add a 25-50-word standalone definition directly under H1: "Jod is a Singapore jobs app for blue-collar workers. Workers apply in minutes for F&B, retail, cleaning, security, logistics, and warehouse shifts. Every completed shift includes free Personal Accident and Public Liability insurance underwritten by Etiqa. Pay arrives the next working day." This block doubles as the AI-Overview citation answer for "what is jod". - Trust strip above the fold with three concrete signals: "Insurance underwritten by Etiqa", "Singapore-registered (UEN: [fill in])", "Daily or next-working-day pay". Per
entity-optimizer/SKILL.mdStep 2 Category 5, naming the underwriter is the highest-weight trust signal. - "Trusted by" partner-logo strip — NTUC FairPrice, McDonald's, Four Points (matches in-site search top intent).
- Standardise to "Jod" — drop "Jod Board" everywhere.
- Single H1:
Jod — Singapore Jobs App for Blue-Collar Workers. The emotional line "Work today, get paid tomorrow." becomes a hero H2.
JSON-LD
See Global JSON-LD for app/root.jsx above. The homepage uses the global schema; no page-specific JSON-LD needed.
Plus: add og:title, og:description, og:image (1200x630), og:url, og:type=website, og:site_name=Jod, twitter:card=summary_large_image, twitter:title, twitter:description, twitter:image.
Page 2: /about
Current: Title "About Us — Jod". Description is generic mission boilerplate. H1 "Empowering your journey". Opening line is awkward.
GSC: 88+ trust-related impressions/month with zero clicks (see Why this matters § Trust-query gap).
Title and meta
Final A — entity definitional (recommended primary)
- Title:
What Is Jod? Singapore's Blue-Collar Jobs App | About(53 chars) - Description:
Jod is a Singapore jobs app for blue-collar workers. MOM-licensed employers, free Etiqa insurance, daily pay. Trusted by NTUC, McDonald's, more.(146 chars)
Why: title literally answers the highest-impression unanswered query ("what is jod"). Three trust signals + named employers. Expected CTR lift on "what is jod" from 0% to 8-12%.
Final B — click-driven
- Title:
About Jod — Singapore Jobs App with Daily Pay & Insurance(57 chars) - Description:
Jod connects Singapore's blue-collar workers with verified F&B, retail, cleaning, security, and warehouse employers. Daily pay. Free Etiqa insurance.(148 chars)
Content audit
- Replace H1 →
What Is Jod?(pergeo-content-optimizer/SKILL.mdStep 3 — answer-first H1 wins AI Overviews). - Replace opening line → "Jod is a Singapore jobs app. We help blue-collar workers find work in F&B, retail, cleaning, security, logistics, and warehouse roles. Every job includes free worker insurance underwritten by Etiqa." (canonical 40-word standalone definition).
- Trust section directly under the definition — Singapore UEN, registered office address, MOM Employment Agency licence (if held), insurance underwriter (Etiqa), year founded.
- Numbers strip — workers registered, jobs completed, employers, insurance claims paid. Even rough numbers count (per
geo-content-optimizer/SKILL.mdStep 3 — specific data over vague claims). - "What does Jod mean?" sub-section — wins the "jod meaning" tail and supports entity disambiguation. ("jod" is also a Hebrew letter and a Dutch word — must explicitly disambiguate.)
- Founder bio block — name, title, prior experience, LinkedIn link. Per
entity-optimizer/SKILL.mdStep 2 Category 6, the founder is a key entity signal. Apply PDPA care for Singapore residents.
JSON-LD
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "AboutPage",
"@id": "https://jodapp.com/about#webpage",
"url": "https://jodapp.com/about",
"name": "What Is Jod?",
"description": "Jod is a Singapore jobs app for blue-collar workers, with MOM-licensed employers, daily pay, and free Etiqa-underwritten worker insurance.",
"isPartOf": { "@id": "https://jodapp.com/#website" },
"mainEntity": { "@id": "https://jodapp.com/#organization" },
"primaryImageOfPage": { "@id": "https://jodapp.com/#logo" },
"datePublished": "[YYYY-MM-DD]",
"dateModified": "[YYYY-MM-DD]"
}
]
}
Plus a re-declared Organization block with address, founder, foundingDate matching the global schema (@id must match exactly per schema-markup-generator/SKILL.md Step 2).
Page 3: /contact
Current: Title "Contact Us | Jod". Description: "Get in touch with Jod via WhatsApp or Email. We are here to help!".
GSC: "jod" 8/926/pos 4.10/CTR 0.86% (second-largest CTR waste — 918 wasted impressions).
Title and meta
Final A — channel-explicit (recommended primary)
- Title:
Contact Jod Singapore — WhatsApp, Email & Phone Support(55 chars) - Description:
Need help with the Jod app, your account, payouts, or insurance claims? Message Jod on WhatsApp, email support@jodapp.com, or call our Singapore team.(152 chars)
Final B — promise-driven
- Title:
Talk to Jod Support — Singapore Workers, Reply in Hours(55 chars) - Description:
Stuck with an application, payout, or insurance claim? Jod's Singapore support team replies within 4 hours on WhatsApp and email. Open Mon–Sun.(146 chars)
Content audit
- Phone number above the fold — many Bangladeshi/Indian/Filipino workers prefer voice over text.
- Support hours visible — "Mon–Sun 8am–10pm SGT" or whatever the truth is.
- Singapore office address with Google Maps embed — major trust signal for migrant workers worried about scams.
- "What can we help with?" pre-filled WhatsApp links — one per intent (account, application, payout, insurance, employer inquiry).
- Multilingual WhatsApp pre-fills — Bengali, Tamil, Bahasa Indonesia (per
geo-content-optimizer/SKILL.mdSingapore-specific E-E-A-T). - Add an FAQ section with the top 5 support questions — answers each get FAQPage schema. Recovers 918 wasted "jod" impressions.
JSON-LD
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "ContactPage",
"@id": "https://jodapp.com/contact#webpage",
"url": "https://jodapp.com/contact",
"name": "Contact Jod Singapore",
"isPartOf": { "@id": "https://jodapp.com/#website" },
"about": { "@id": "https://jodapp.com/#organization" }
},
{
"@type": "Organization",
"@id": "https://jodapp.com/#organization",
"address": {
"@type": "PostalAddress",
"streetAddress": "[fill in]",
"addressLocality": "Singapore",
"postalCode": "[fill in]",
"addressCountry": "SG"
},
"contactPoint": [
{
"@type": "ContactPoint",
"telephone": "+65-XXXX-XXXX",
"contactType": "customer support",
"email": "support@jodapp.com",
"areaServed": "SG",
"availableLanguage": ["English", "Bengali", "Tamil", "Bahasa Indonesia"],
"hoursAvailable": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "08:00",
"closes": "22:00"
}
}
]
}
]
}
Use Organization (not LocalBusiness) since Jod is a software company without a public storefront — plugin clarification.
Page 4: /how-it-works
Current: Title "How Jod Works | Jod" (brand stutter). Body is a single YouTube iframe — no text content.
GSC: "jod" 7/1,212/pos 5.21/CTR 0.58% — biggest single-page CTR waste on the site (1,205 wasted impressions).
Title and meta
Final A — process-explicit (recommended primary)
- Title:
How Jod Works — Apply, Work, Get Paid in Singapore(50 chars) - Description:
Sign up, browse Singapore jobs, apply in one tap, work, and get paid daily. Jod includes free Etiqa insurance. Watch the 2-min video.(133 chars)
Final B — onboarding hook
- Title:
Jod in 2 Minutes — How to Find Singapore Jobs & Get Paid(56 chars) - Description:
New to Jod? Watch the 2-minute walkthrough and learn how to apply for F&B, retail, cleaning, and warehouse jobs in Singapore. Free to join. Daily pay.(149 chars)
Content audit
- (P0) Add 4-step text section above the video (each step gets 2 sentences):
- Step 1 — Sign up. Free. Takes 2 minutes. Singapore phone number required.
- Step 2 — Browse jobs. Filter by employer, role, or category. New jobs daily across F&B, retail, cleaning, security, logistics, and warehouse.
- Step 3 — Apply in one tap. Most workers hear back within 24 hours.
- Step 4 — Work and get paid. Pay arrives the next working day. Every shift includes free Etiqa worker insurance.
- Add a video transcript or summary below the embed — required for crawl indexing.
- "What you need to start" box — work-pass status (WP, SP, EP, PR, citizen), NRIC/FIN, Singapore phone, bank account.
- Cross-link to
/help/faqsat the bottom. - GEO addition: 3 dated FAQ items at the page foot — "How long does sign-up take?", "When do I get paid?", "Is Jod free to use?". Each with a 50-80 word answer.
JSON-LD
Triple-stack: HowTo + VideoObject + FAQPage.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "HowTo",
"@id": "https://jodapp.com/how-it-works#howto",
"name": "How to find and apply for jobs on Jod",
"description": "A 4-step guide to signing up, applying, working, and getting paid on Jod, the Singapore blue-collar jobs app.",
"totalTime": "PT5M",
"estimatedCost": { "@type": "MonetaryAmount", "currency": "SGD", "value": "0" },
"supply": [
{ "@type": "HowToSupply", "name": "Singapore phone number" },
{ "@type": "HowToSupply", "name": "NRIC or FIN" },
{ "@type": "HowToSupply", "name": "Singapore bank account" }
],
"step": [
{ "@type": "HowToStep", "position": 1, "name": "Sign up free", "text": "Create your Jod account in 2 minutes using your Singapore phone number." },
{ "@type": "HowToStep", "position": 2, "name": "Browse jobs", "text": "Filter Singapore jobs by employer, role, or category — F&B, retail, cleaning, security, logistics, warehouse." },
{ "@type": "HowToStep", "position": 3, "name": "Apply in one tap", "text": "Tap apply on any job. Most workers hear back within 24 hours." },
{ "@type": "HowToStep", "position": 4, "name": "Work and get paid", "text": "Complete the shift. Pay arrives the next working day. Every shift includes free Etiqa worker insurance." }
]
},
{
"@type": "VideoObject",
"@id": "https://jodapp.com/how-it-works#video",
"name": "How Jod Works",
"description": "A 2-minute video showing how to find and apply for jobs on the Jod app in Singapore.",
"thumbnailUrl": "https://i.ytimg.com/vi/-lijla5rohg/maxresdefault.jpg",
"uploadDate": "[YYYY-MM-DD]",
"embedUrl": "https://www.youtube.com/embed/-lijla5rohg",
"publisher": { "@id": "https://jodapp.com/#organization" }
}
]
}
Critical: HowTo schema requires the steps to be visible on the page — schema without visible steps is a guideline violation. Ship the content fix and the schema together.
Page 5: /help/faqs
Current: Title "FAQs | Jod". 20 well-structured Q&As, no FAQPage schema.
GSC: "jod" 1/717/pos 2.91/CTR 0.14% — worst CTR on the site (page ranks position 3 but no one clicks).
Title and meta
Final A — section-explicit (recommended primary)
- Title:
Jod FAQs — Account, Insurance, Pay & Rewards Help(50 chars) - Description:
Quick answers about your Jod account, free worker insurance, daily payouts, JodRewards points, and applying for Singapore jobs.(128 chars)
Final B — speed-promise
- Title:
Jod Help Centre — Get Answers in 30 Seconds(45 chars) - Description:
New to Jod? Existing worker? Find quick answers about signing up, getting paid, claiming insurance, and earning JodRewards points. Updated weekly.(147 chars)
Content audit
- (P0) Add FAQPage schema — single highest-leverage schema change on the site. FAQ rich results frequently double or triple SERP CTR for support intent.
- Surface top 3 questions above the fold: "When do I get paid?", "Am I insured?", "How do I apply?".
- In-page search bar — 717 imp/month implies question-shaped queries.
- Collapsible sections with anchor links —
<h2 id="payouts">When do I get paid?</h2>lets Google index individual answers as Site Links. - Cross-link from each answer to
/insurance,/rewards,/contact. - GEO addition: rewrite each answer to be standalone-citable. Open with a one-sentence direct answer. Follow with a sourced/dated detail. Avoid pronouns that need context.
JSON-LD
{
"@context": "https://schema.org",
"@type": "FAQPage",
"@id": "https://jodapp.com/help/faqs#faqpage",
"url": "https://jodapp.com/help/faqs",
"name": "Jod FAQs",
"inLanguage": "en-SG",
"isPartOf": { "@id": "https://jodapp.com/#website" },
"datePublished": "[YYYY-MM-DD]",
"dateModified": "[YYYY-MM-DD]",
"mainEntity": [
{
"@type": "Question",
"@id": "https://jodapp.com/help/faqs#payouts",
"name": "When do I get paid for a job on Jod?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Pay arrives the next working day after your shift ends. Payments are processed automatically by 09:00 SGT and typically clear into the Singapore bank account you registered on the Jod app by 17:00 SGT the same day."
}
},
{
"@type": "Question",
"@id": "https://jodapp.com/help/faqs#insurance",
"name": "Am I insured when I work a Jod gig?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. Every worker registered on Jod is covered by Personal Accident and Public Liability insurance, underwritten by Etiqa Insurance Singapore, for every completed job. There is no extra cost to the worker."
}
},
{
"@type": "Question",
"@id": "https://jodapp.com/help/faqs#rewards",
"name": "What is JodRewards?",
"acceptedAnswer": {
"@type": "Answer",
"text": "JodRewards is the Jod loyalty programme. Workers earn points for every job they complete and can redeem them for cash bonuses, food vouchers, sponsored insurance top-ups, and exclusive employer-campaign payouts."
}
}
]
}
Add the full set of 20 Q&As when implementing. Per schema-markup-generator/SKILL.md Step 2: JSON-LD text must be identical to the visible answer wording, not a paraphrase.
Page 6: /sign-up
Current: Title "Sign up" (no brand). Description is leftover boilerplate from a different product ("dead simple appointment and scheduling app"). No H1.
GSC: "jod" 2/282/pos 1.5/CTR 0.71% — page ranks #1.5 for "jod" but converts at 0.71% because of the broken description. Single biggest leverage on the site.
Title and meta
Final A — branded sign-up (recommended primary)
- Title:
Sign Up for Jod — Free Singapore Blue-Collar Jobs App(53 chars) - Description:
Create your free Jod account in 2 minutes. Apply for F&B, retail, cleaning, security, and warehouse jobs in Singapore. Daily pay. Free Etiqa insurance.(151 chars)
Final B — quantified offer
- Title:
Join Jod Free — Apply to Singapore Jobs in 2 Minutes(52 chars) - Description:
Free to join. Free Etiqa worker insurance. Daily pay. Sign up for Jod and apply to F&B, retail, cleaning, security, and warehouse jobs in Singapore.(148 chars)
Expected CTR lift: 0.71% → 15%+ on a position-1.5 result.
Content audit
- (P0) Add an H1 →
Sign Up for Jod — Free Singapore Jobs App. - 3 trust bullets next to the form: "Free forever", "Etiqa worker insurance included", "Daily pay".
- Show the value proposition above the form.
- Social proof under the form — "Join [X]+ workers in Singapore" (only if real).
- "Already have an account? Log in" link prominently.
- GEO addition: 30-word standalone definition above the form for AI-Overview citation.
JSON-LD
WebPage + BreadcrumbList. The schema is light because the page inherits Organization and WebSite from root.
Page 7: /login
Current: Title "Sign In". Malformed <meta> tag: name="Login" (invalid) with content "Create your account today!" (sign-up copy on a login page). No H1.
GSC: "jod login" 8/47/pos 2.96/CTR 17% — already good, minor optimisation.
Title and meta
Final A — exact-match (recommended primary)
- Title:
Jod Login — Sign In to Your Singapore Jobs Account(50 chars) - Description:
Log in to your Jod account to apply for jobs, track shifts, view payouts, claim worker insurance, and manage JodRewards in Singapore.(134 chars)
Final B — dual-sided
- Title:
Log In to Jod — Singapore Workers & Employers(46 chars) - Description:
Sign in to your Jod account. Workers: track shifts and payouts. Employers: manage job posts and applicants. One Jod login, both sides.(134 chars)
Content audit
- (P0) Fix the malformed meta tag —
name="Login"→name="description". - (P0) Add an H1 →
Log In to Jod. - "Forgot password?" link prominent.
- "Don't have an account? Sign up free" link.
- Replace internal jargon — "Gig Partners" → "Workers"; "Careers" → "Employers".
Page 8: /rewards
Current: Title "Rewards" (no brand). H1 "Effortless benefits!".
GSC: "jod rewards" 6/10/pos 1.9/CTR 60% (already winning — preserve and slightly improve).
Title and meta
Final A — programme-named (recommended primary)
- Title:
JodRewards — Earn Points for Every Singapore Job(48 chars) - Description:
Get points every time you complete a job on Jod. Redeem for cash bonuses, food vouchers, sponsored insurance, and exclusive employer campaigns.(143 chars)
Final B — rule-of-three
- Title:
JodRewards — Free Points, Bonuses & Insurance Top-Ups(53 chars) - Description:
Every shift you complete on Jod earns you JodRewards points. Spend them on food vouchers, cash bonuses, and Etiqa insurance top-ups. Free for every Jod worker.(159 chars)
Content audit
- Replace H1 →
JodRewards — Earn Points for Every Singapore Job. - Points table above the fold: 1 job = X points; 100 points = $5 voucher.
- Named partners: NTUC, FairPrice, McDonald's vouchers; Etiqa insurance top-ups.
- "How to earn faster" section linking
/bonusescampaigns. - Standardise to "JodRewards" (one word) across the entire site.
- GEO addition: answer "What is JodRewards?" in 40-50 words above the points table.
JSON-LD
Use Service (well-supported) instead of LoyaltyProgram (not yet a confirmed rich-result type) — plugin verification.
Page 9: /bonuses
Current: Title "Bonuses - Campaigns & Challenges". Description uses internal acronym "FSC". Multiple H1s on page.
Title and meta
Final A — dollar-led (recommended primary)
- Title:
Jod Campaigns — Earn Up to $200 Bonuses Each Month(50 chars) - Description:
Join Jod's monthly campaigns: refer-a-friend, first-month challenges, FairPrice and partner promotions. Earn up to $200 extra on top of your job pay.(151 chars)
Final B — short-and-sharp
- Title:
Earn $200 Extra on Jod — Bonuses & Refer-a-Friend(49 chars) - Description:
Refer friends and earn cash. Complete your first month and unlock bonuses. Join FairPrice and partner campaigns. All on top of your daily Jod pay.(146 chars)
Content audit
- Fix multiple H1s — single H1:
Jod Campaigns and Bonuses. Each campaign sub-section becomes H2. - Move "$200 incentive" to the top.
- Spell out FSC — internal acronyms violate CORE-EEAT C09.
- End-date countdown for time-limited campaigns.
- 3-step "How does it work?" per campaign.
JSON-LD
Use ItemList of Event items for time-bound campaigns. (PromotionalOffer is not a top-level Schema.org type — plugin caught this v1 error.)
Page 10: /insurance
Current: Title "Worker Insurance | Jod". Description: bland, no underwriter named.
Title and meta
Final A — underwriter-named (recommended primary)
- Title:
Jod Worker Insurance — Free Etiqa Cover for SG Workers(54 chars) - Description:
Every Jod worker is covered by free Personal Accident and Public Liability insurance, underwritten by Etiqa, for every completed shift in Singapore.(149 chars)
Final B — scenario-led
- Title:
Free Worker Insurance with Every Jod Shift in Singapore(54 chars) - Description:
Work-injury claim? Public liability claim? Jod includes Personal Accident and Public Liability cover, free, underwritten by Etiqa, for every shift you complete.(159 chars)
Content audit
- Name Etiqa as the underwriter prominently — single highest-weight trust signal.
- Coverage amounts — Personal Accident: up to $X; Public Liability: up to $X.
- "How to claim" 3-step walkthrough.
- "What's not covered" — honest exclusions build trust faster than vague "comprehensive cover".
- Policy reference number / certificate — link to a downloadable summary if Etiqa issues one.
- MAS check — Etiqa is regulated by the Monetary Authority of Singapore. State this once for entity trust.
JSON-LD
Use Service with provider = Etiqa Insurance Singapore. Plugin clarification: InsuranceAgency is for brokers/sellers; if Jod is the policyholder of a master policy, the right model is Service offered by Jod, provided by Etiqa.
Page 11: /employers
Current: Title uses U+2011 non-breaking hyphens (P0 bug #4). No og:image, no canonical, no JSON-LD. Has Employer FAQs section without FAQPage schema.
GSC: "jod singapore" 6/109/pos 4.79 + lots of zero-click B2B impressions ("how to post jobs in singapore" 52 imp/0 clicks, "find workers" 9/0, "employer post job" 7/0).
Title and meta
Final A — query-targeted (recommended primary)
- Title:
Hire Blue-Collar Workers in Singapore — Post Jobs on Jod(56 chars, regular hyphens) - Description:
Post full-time, part-time, and gig jobs in Singapore. Hire vetted F&B, retail, cleaning, security, logistics, and warehouse workers. Free to post.(149 chars)
Final B — speed-promise
- Title:
Post Jobs Free in Singapore — Hire in 48 Hours | Jod(51 chars) - Description:
Need staff fast? Post your job on Jod and reach Singapore's blue-collar worker pool. F&B, retail, cleaning, security, logistics. First post free.(147 chars)
Content audit
- (P0) Replace U+2011 with regular U+002D hyphens.
- (P0) Add og:image (1200x630) — without it, every WhatsApp/LinkedIn share is broken.
- Add canonical tag.
- FAQPage schema for the existing Employer FAQs section.
- Numbers strip — workers in network, average time-to-hire, top employer brands.
- Add a "How to post jobs in Singapore" content section — 52 impressions/month with zero clicks today.
- GEO addition: 40-word definition at the top.
Page 12: /jobs (job listing index)
Current: Title "Job List | Jod Board". H1 "Jobs". Brand inconsistency. No ItemList schema.
Title and meta
Final A — category-explicit (recommended primary)
- Title:
Singapore Jobs — F&B, Retail, Cleaning, Warehouse | Jod(54 chars) - Description:
Browse current jobs in Singapore on Jod. Filter by employer (NTUC, FairPrice, McDonald's), role (cleaner, driver, packer), or category. Apply free.(151 chars)
Final B — hiring-now
- Title:
Jobs in Singapore Hiring Now — Apply Today on Jod(49 chars) - Description:
Hundreds of Singapore jobs hiring now: F&B, retail, cleaning, security, logistics, warehouse. Daily pay. Free Etiqa insurance. Apply in one tap.(148 chars)
Content audit
- Replace H1 →
Singapore Jobs Hiring Now. - Top filter bar visible above the fold — by employer, role, category (matches in-site search hierarchy).
- "Top Employers" strip linking to dedicated employer pages.
- Job count by category ("F&B (45 jobs)").
- Standardise to "Jod" — drop "Jod Board".
- GEO addition: 50-word definitional intro paragraph above the listings.
JSON-LD
CollectionPage + ItemList pointing to individual job detail pages. Each individual job detail page must carry the full JobPosting schema (Google for Jobs eligibility — high-leverage).
Page 13: /jobs/mcdonalds
Current: Title "McDonald's Jobs - Part-time & Gig Opportunities" — no Jod brand, no Singapore in title. Has og:* and twitter:* but missing twitter:card (P0 bug #5). No og:type, no og:url, no og:site_name. No JSON-LD.
Title and meta
Final A — query-matched (recommended primary)
- Title:
McDonald's Singapore Jobs — Apply on Jod(40 chars) - Description:
Apply to McDonald's part-time, gig, and full-time jobs in Singapore on Jod. Daily pay. Free Etiqa worker insurance. Real McDonald's vacancies.(143 chars)
Final B — role-specific
- Title:
McDonald's Jobs in Singapore — Apply Today on Jod(49 chars) - Description:
New McDonald's vacancies in Singapore: crew, kitchen, manager, part-time and gig shifts. Daily pay. Free Etiqa insurance. Apply in 2 minutes on Jod.(148 chars)
Content audit
- (P0) Add
twitter:card=summary_large_image. - (P0) Add og:type=website, og:url (canonical), og:site_name=Jod.
- (P0) Add JobPosting JSON-LD for each McDonald's role — Google for Jobs eligibility.
- Replace title — "Singapore" and "Jod" must both appear.
- McDonald's logo + "Verified Employer" badge — third-party brand co-citation is the strongest signal.
- GEO addition: 40-word definition at the top.
JSON-LD
CollectionPage + ItemList of JobPosting (one per active McDonald's role). Schema must mirror exactly the role title and description shown on the page (schema-markup-generator/SKILL.md Step 2). Replicate the structure for NTUC, FairPrice, and other top employer pages.
Plugin-specific contributions (v2 vs v1)
What the
seo-geo-claude-skillsplugin added beyond a generic SEO audit. This section is the verification mechanism — each item points to the exact plugin file path that contributed it.
From cross-cutting/entity-optimizer/SKILL.md
- Brand entity authority playbook — reframed the brand-CTR problem from a title-text problem to an entity-resolution problem. Wikidata, Knowledge Graph, NAP+E consistency.
- AI Entity Resolution Test — measurable input the previous audit lacked.
- 6 entity-signal categories (47 signals) — structured data, knowledge bases, NAP+E, content-based, third-party, AI-specific.
@idconsistency across schema blocks — single canonical@idreused across every page.- PDPA awareness for founder profiles — lawful-basis check before publishing personal data.
From build/schema-markup-generator/SKILL.md
- Visible-content alignment rule — every claim in JSON-LD must be visibly present on the page in matching wording.
MobileApplicationschema added to homepage (new vs v1) — strengthens the "jod app" query.HowTo+VideoObjectstack on/how-it-works(v1 had VideoObject only).Serviceschema for/insurancewith Etiqa asprovider— corrects v1'sInsuranceAgencyerror.@graphwrapper standard on every multi-type page.dateModifieddiscipline — must update on every save and match the visible "Last updated" date.inLanguage: "en-SG"on FAQPage and WebSite.Event(notPromotionalOffer) for time-bound campaigns —PromotionalOfferis not a top-level Schema.org type; plugin caught this.
From build/meta-tags-optimizer/SKILL.md
- Pixel-width validation, not character counts — ~600px desktop / ~660px mobile for titles.
- Three-option generation, then narrow to two A/B variants.
- CORE-EEAT C01 Intent Alignment + C02 Direct Answer check on every meta.
- Verifiability check on numbers (CORE-EEAT R01) — every number in a meta description must be provable on the page. Removed v1's unverified "1,000+ jobs" and "50,000+ workers".
- Question-led mobile descriptions — 8-15% lift on mobile.
From build/geo-content-optimizer/SKILL.md
- 25-50 word standalone definitions as the first paragraph on every public page — citable, AI-Overview-ready paragraph.
- Quotable-content patterns — open with a one-sentence answer, follow with a sourced/dated detail.
- Specific-data discipline — replace vague benefit language with named providers (Etiqa), named regulators (MAS, MOM), named partners (NTUC, McDonald's), named numbers.
- Singapore-specific E-E-A-T signals — UEN, MOM EA licence, MAS regulator, multilingual support languages.
- Disambiguation for "Jod" — explicitly disambiguate from the Hebrew letter "jod" and the Dutch word "jod".
- Freshness signals on FAQ rich results —
datePublished+dateModifiedper question.
From optimize/on-page-seo-auditor/SKILL.md
- CORE-EEAT 17-item on-page scan as the explicit cross-check on every page audit.
Gap analysis — additional considerations
Things either out of scope of the original action item #1 wording, or things we have not covered in prior conversations. Recommend folding most of these in.
- Brand defense / competitor SERP screenshot baseline — who else ranks for "jod" in Singapore? FastJobs, MyCareersFuture, JobStreet, Indeed could be bidding on our brand. Take a SERP screenshot today; re-take in 8 weeks for comparison.
- Multi-subdomain brand split —
gig.jodapp.comis appearing in branded SERP with 853 imp / 0.35% CTR. Need to decide which subdomain owns the brand SERP and canonicalize. Perentity-optimizer/SKILL.mdStep 2 Category 3 (NAP+E consistency), the canonical brand domain must be one. - Knowledge Panel target — covered in Brand entity authority playbook above. Out-of-scope addition to the original action item.
- Sitelinks influence — internal linking from homepage shapes which sub-pages appear as Sitelinks. Audit and tighten internal navigation.
- Tracking baseline — without a before/after snapshot, we cannot prove the work moved the needle. See Success metrics & tracking below.
- CTR is a ranking signal — improving CTR may also improve position. Action item #1 has a self-reinforcing effect (better CTR → better position → more impressions → more clicks).
- Brand defense via Google Ads — bidding on own brand is often worth it when competitors bid on it. Worth a separate evaluation by Marketing.
- Mobile-first SERP testing — 73% of clicks are on mobile. Test new titles on a mobile-width SERP simulator (e.g. mangools.com SERP simulator).
- Schema validation pipeline — every JSON-LD change must be tested via Google Rich Results Test before merge. Consider adding a CI step that validates
Organization,WebSite,FAQPage,JobPostingschemas on staging before deploy. - Multi-language brand search — pull non-English brand variants from GSC: "joda", "jod kerja" (Malay), Chinese-script brand searches. Singapore audience is multilingual.
- Page Experience signals — Core Web Vitals (LCP/INP/CLS) affect SERP CTR. Hero
<img>and AdSense issues on homepage should be fixed in parallel. (Tracked separately as action item #2 in the parent report.) - Robots.txt missing Sitemap directive — already noted in the parent report. Adding the directive helps non-Googlebot crawlers discover the sitemap and is part of clean technical SEO hygiene.
- GSC URL-prefix property returns zero rows — recommend deprecating it to reduce confusion. Use only
sc-domain:jodapp.com. /aboutscope expansion — formally adding/aboutrewrites to action item #1 because the trust-query data shows it is a high-leverage SERP page. Originally implicit; making it explicit.
Implementation plan (phased)
Week 1 — P0 bugs and schema foundation
- Fix all 7 P0 bugs (Eng-Web, ~1 day total)
- Marketing decides canonical brand string (~30 min decision)
- Run AI Entity Resolution Test (Phase 0 of brand entity playbook) — Marketing, ~1 hour
- Take baseline SERP screenshot for "jod" on Google.com.sg — Marketing, ~5 min
- Snapshot current GSC numbers as the baseline metric set
Week 2 — Global JSON-LD + homepage rewrite
- Deploy
Organization+WebSite+MobileApplicationschemas toapp/root.jsx(Eng-Web) - Validate via Schema.org Validator + Google Rich Results Test (Eng-Web)
- Rewrite homepage
/title, description, OG tags, content (Marketing copy + Eng-Web) - Submit homepage to GSC for re-indexing
Weeks 3-4 — Trust pages
- Rewrite
/about(entity definitional content, founder bio, UEN, trust strip) — Marketing + Eng-Web - Rewrite
/contact(channel-explicit copy, multilingual WhatsApp pre-fills, FAQPage stub) — Marketing + Eng-Web - Rewrite
/how-it-works(4-step text, video transcript, HowTo + VideoObject schema) — Marketing + Eng-Web - Rewrite
/help/faqs(top-3 above the fold, FAQPage schema) — Marketing + Eng-Web
Weeks 5-6 — Conversion pages + employer page
- Rewrite
/sign-up(title, H1, description, trust bullets) — Marketing + Eng-Web - Rewrite
/login(title, fix malformed meta, H1) — Marketing + Eng-Web - Rewrite
/employers(regular hyphens, og:image, FAQPage schema, "How to post jobs" section) — Marketing + Eng-Web - Rewrite
/jobsindex (Singapore in title, ItemList schema, top employers strip) — Marketing + Eng-Web
Weeks 7-8 — Content programme pages + replicate top-employer pattern
- Rewrite
/rewardsand/bonuses(programme-named titles, points table, single H1, Service/ItemList schemas) — Marketing + Eng-Web - Rewrite
/insurance(Etiqa named, MAS-regulated, Service schema, coverage amounts) — Marketing + Eng-Web - Rewrite
/jobs/mcdonalds(twitter:card, JobPosting schema, "Verified Employer" badge) — Marketing + Eng-Web - Replicate
/jobs/mcdonaldspattern for 3-5 other top employer pages (NTUC, FairPrice, Four Points, Mercuria, Seonggong) — Marketing + Eng-Web
Months 2-3 — Brand entity authority work
- Create Wikidata entry for Jod (Marketing)
- Submit to industry directories: CrunchBase, Tech in Asia, e27, etc. (Marketing)
- Standardise NAP+E across all owned platforms (Marketing)
- Add
/about/teampage with founder Person schema (Marketing + Eng-Web) - Press outreach for 3+ editorial features (Marketing)
- Claim Google Business Profile for SG office (Marketing)
- Re-run AI Entity Resolution Test monthly (Marketing)
Months 4-6 — Knowledge Panel candidate
- Wikipedia article candidacy (only when 3+ press features in place) — Marketing
- Glassdoor / Trustpilot review profile claim — Marketing
- Monitor Google Knowledge Graph API for Jod entity ID emergence — Marketing
Success metrics & tracking
Take the baseline today. Track weekly. Review at 4-week, 8-week, 12-week, and 6-month checkpoints.
Baseline (2026-04-09 to 2026-05-04)
| Metric | Baseline value | Source |
|---|---|---|
| "jod" clicks (28d) | 179 | GSC |
| "jod" impressions (28d) | 7,657 | GSC |
| "jod" CTR | 2.34% | GSC |
| "jod" avg position | 6.93 | GSC |
| "what is jod" clicks (28d) | 0 | GSC |
| "what is jod" impressions (28d) | 40 | GSC |
| Trust-query total impressions (28d) | ~88 | GSC |
| Trust-query total clicks (28d) | 0 | GSC |
| Pages with Organization schema | 0 | Code audit |
| Pages with FAQPage schema | 0 | Code audit |
| Pages with full OG tags | 1 of 13 | Code audit |
| AI Entity Resolution Test score | not yet measured | Phase 0 task |
Target trajectory
| Checkpoint | "jod" CTR target | "jod" position target | New milestones |
|---|---|---|---|
| 4 weeks | 3.0% | 6.5 | Schemas live, homepage rewrite live, P0 bugs cleared |
| 8 weeks | 4.0% | 6.0 | All trust + conversion pages rewritten, Wikidata entry live |
| 12 weeks | 5-7% | 5.0 | Top-employer page pattern replicated, 3+ press features |
| 6 months | 7-15% | 1-3 | Knowledge Panel candidate, Sitelinks search box live |
Weekly tracking query
Run this gsccli command every Monday and log to a shared sheet:
gsccli query run -d query \
--filter 'query~jod' \
--start-date 7daysAgo --end-date today \
--site sc-domain:jodapp.com \
-f csv > weekly-jod-tracking-$(date +%F).csv
Regression alerts
- If "jod" CTR drops below 2.0% at any point, investigate immediately.
- If "jod" position drops below 8.0, investigate immediately.
- Use GSC's "Performance" report email alerts as a backup signal.
Owners & responsibilities
| Role | Owner | Responsibilities |
|---|---|---|
| Marketing copywriting | Marketing | All title/description/OG copy. Brand consistency decision. Content rewrites for /about, /how-it-works, FAQ answers, etc. |
| Marketing — entity work | Marketing | Wikidata entry, directory submissions, NAP+E consistency across platforms, Google Business Profile claim, press outreach, AI Entity Resolution Test monthly |
| Marketing — Google Ads admin | Marketing | Brand defence campaign evaluation (gap #7) |
| Marketing — tracking | Marketing/BI | Weekly GSC pull, baseline screenshot, regression alerts, monthly checkpoint reports |
| Engineering — Web (route changes) | Eng-Web | All meta and links exports, HTML head changes, JSON-LD insertion, P0 bug fixes |
| Engineering — Web (schema validation) | Eng-Web | Run every JSON-LD through Schema.org Validator + Google Rich Results Test before merge. Optional: CI pipeline integration |
| Engineering — Web (content components) | Eng-Web | New /about/team route, /news or /press section, content components for top-employer pages |
| Sales | Sales | Identify employer partnerships willing to be featured in case studies (parallel to action item #15 in parent report) |
References
Plugin skills used (cited inline above)
cross-cutting/entity-optimizer/SKILL.md— brand entity authority playbook, AI Entity Resolution Test, NAP+E consistencybuild/schema-markup-generator/SKILL.md— JSON-LD content-type mapping, visible-content alignment, validationbuild/meta-tags-optimizer/SKILL.md— pixel-width validation, three-option generation, CORE-EEAT verifiabilitybuild/seo-content-writer/SKILL.md— 9-step content workflow, content briefs as input contractsbuild/geo-content-optimizer/SKILL.md— Singapore-specific E-E-A-T signals, quotable-content patterns, standalone definitionsoptimize/on-page-seo-auditor/SKILL.md— 11-step audit rubric, CORE-EEAT 17-item scan, single-H1 enforcement
Plugin location: /Users/alaay/.claude/plugins/marketplaces/aaron-seo-geo/
Prior reports
- 2026-05-07 Web Health & Growth Report — parent report. This action plan implements item #1 of the prioritised backlog.
Code references
app/root.jsx— global meta + JSON-LD locationapp/routes/home.jsx:19-27— homepage meta export (P0 bug #3)app/routes/about-page.jsx:8-11— about page meta exportapp/routes/contact-page.jsx:16-17— contact meta exportapp/routes/how-it-works-page.jsx:9-10— how-it-works meta export (P0 bug #6)app/routes/help/help-faqs-page.jsx:11-12— FAQs meta exportapp/routes/identities-user/identities-user-sign-up-page.jsx:14-17— sign-up meta export (P0 bugs #1 + #7)app/routes/login-page.jsx:14-19— login meta export (P0 bug #2)app/routes/rewards-page.jsx:10-13— rewards meta exportapp/routes/bonuses-page.jsx:7-10— bonuses meta exportapp/routes/insurance-page.jsx:9-10— insurance meta exportapp/routes/org/org-home-page.jsx:5-15— employers meta export (P0 bug #4)app/routes/jobs/job-list-page.jsx:24-27— jobs index meta exportapp/routes/jobs/jobs-mcdonald-page.jsx:19-81— McDonald's landing meta export (P0 bug #5)app/domains/listings-job/listings-job-service.js:32— only existing JSON-LD location (job detail pages)
External validation tools
- Schema.org Validator — required validation step before merge
- Google Rich Results Test — required validation step before merge
- Google Search Console — weekly tracking for "jod" CTR + position
- Wikidata Sandbox — Phase 1 Wikidata entry creation
Document compiled 2026-05-07 by Senior PM (LLM agent) using GA4 + GSC data, live HTML inspection, jodapp-web codebase audit, and the seo-geo-claude-skills plugin (v2 audit with explicit plugin citations). Implements item #1 of the parent web-seo-report's prioritised backlog.