Right-click your homepage. Select View Page Source. Not Inspect Element, which shows you what JavaScript built. View Source, which shows what the server sent.
Now use your browser's find function and search for your OJK registration number.
Zero results, almost certainly.
The number is on the page. A visitor can see it. It sits inside a badge image in the footer, rendered as pixels, alongside a reassuring green tick.
Google cannot read it. Neither can ChatGPT. Neither can the borrower who just asked an AI whether your institution is legally licensed.
The Most Valuable Fact You Have, Stored as Decoration
OJK's Satgas PASTI has blocked 14,005 illegal financial entities since 2017. Illegal lenders, fraudulent investment schemes, unlicensed pawnshops. Fourteen thousand, removed one at a time, each with customers before removal.
Indonesian borrowers understand this landscape. They check whether a lender is legal before they check what it charges. Roughly three of every four financial queries in this market are trust queries rather than product queries.
So your licence number is not a compliance footnote. It is the answer to the question that decides whether anyone reads the rest of your page.
And it is a JPEG.
What each system sees
A human visitor
Sees a badge, reads the number, feels reassured. The design worked exactly as intended.
Googlebot, GPTBot, PerplexityBot
Sees an image file with alt text reading "berizin OJK". No number. Nothing verifiable. Nothing to cite.
The alt text almost never contains the registration number. It says "licensed" or "registered", which every fraudulent site also says.
Why This Matters More Than It Used To
A decade ago, this was a minor SEO inefficiency. Google could not read your licence number, but nobody was searching for it either.
Two things changed.
First, the illegal lending crisis made legitimacy the dominant query. Borrowers who watched a neighbour lose money to an unlicensed lender now open Google with a threat assessment rather than a product search.
Second, generative engines arrived, and they need verifiable facts to cite.
When someone asks ChatGPT which lenders hold an OJK licence, the engine looks for a registration number it can find, read, and ideally cross-check against a government directory. A number published as text satisfies that. A badge image satisfies nothing.
The peer-reviewed evidence supports this directly. Aggarwal and colleagues published the first study of Generative Engine Optimization at ACM SIGKDD 2024, testing ten thousand queries across nine domains. Adding source citations, direct quotations and statistics improved visibility by 30 to 40 percent. Keyword stuffing produced no effect at all.
The domain that benefited most from adding statistics was Law and Government, the closest available proxy for regulated financial content.
Verifiable facts are the currency. Your licence number is one, and you have hidden it.
Where the Number Should Live
Three places, and it needs to be in all of them.
Three homes for one fact
Body copy, as prose
A sentence stating the number, ideally alongside a link to OJK's directory so a reader can verify it independently.
Structured data, server-side
Inside Organization schema, in the HTML head, rendered before JavaScript runs. This is what engines parse first.
Image alt text
Keep the badge. Put the actual number in its alt attribute rather than the word "berizin".
The badge stays. It reassures humans, and it costs nothing. It just stops being the only place the number exists.
What the structured data looks like
The licence, as a machine reads it
"@type": "FinancialService",
"name": "[Institution name]",
"identifier": [
{ "@type": "PropertyValue",
"name": "OJK Licence Number",
"value": "[registration number]" }
],
"hasCredential": {
"@type": "EducationalOccupationalCredential",
"recognizedBy": { "@type": "GovernmentOrganization",
"name": "Otoritas Jasa Keuangan" }
},
"sameAs": ["[OJK directory URL]"]
}
The sameAs reference lets an engine connect your claim to the regulator's own record. That is the difference between an assertion and a fact.
The Same Failure, One Level Deeper
Once you start looking, the pattern repeats everywhere.
Interest rate tables
Rates change. So institutions build rate tables dynamically, pulling from an internal system and rendering them with JavaScript after the page loads.
It works beautifully for customers. Compliance sees correctly displayed disclosures. Nobody notices anything wrong.
Crawlers read the server-side HTML before JavaScript executes. They see an empty container.
Your rates are legally displayed and commercially invisible. Meanwhile the comparison site, which hardcodes its table because it updates monthly rather than continuously, gets indexed.
Loan calculators
Almost always inside an iframe. Never indexed. The single most linkable asset on the page contributes nothing to the page it sits on.
Risk disclosures
Hidden behind an accordion, collapsed by default. Content hidden on load carries less weight, and burying a mandatory disclosure invites a different kind of scrutiny entirely.
A loan page, as a crawler reads it
Invisible
Rate table in JavaScript
Licence number in an image
Calculator in an iframe
Disclosure in a collapsed accordion
Author listed as "Tim Editorial"
Visible
Page title
Marketing copy
Terms and conditions link
Application button
Core Web Vitals passing
Everything a borrower actually needs to evaluate the offer is invisible. Everything the marketing team wrote is not.
The Test That Takes Ninety Seconds
View Source on your loan product page. Use find. Search for four things.
Your licence number. If it appears, good. If not, it lives in an image.
Your interest rate, as a number. If it appears, your table is server-rendered. If not, JavaScript is building it and Google sees nothing.
The word "application/ld+json". If it appears, you have structured data. Now check whether the licence number is inside it.
Your author's name. On any content page. If you find "Tim Editorial", you have a Your Money or Your Life problem that Google's own quality guidelines describe in detail.
Four searches. Most Indonesian financial institutions fail three of them.
Why This Is Cheap to Fix and Expensive to Ignore
Publishing your licence number as text requires no legal approval, because you are not making a claim. You are stating a registration that OJK itself publishes in a public directory.
Adding it to structured data requires a developer for an afternoon.
Rendering rate tables server-side is a genuine engineering task, but it is a task with a clear specification and no regulatory ambiguity.
None of this touches the review queue that slows everything else in financial content. It is the rare intervention that a compliance officer will approve in an email.
And the cost of not doing it compounds. Comparison aggregators answer the legitimacy question on your behalf, collect the borrower's attention, and route them toward whichever lender pays best. Roughly 91% of educational finance queries now trigger an AI Overview, and those Overviews cite sources that publish verifiable facts.
Yours are in a JPEG.
Where This Connects
Machine-readable regulatory data sits at the exact point where two disciplines meet.
Search engines need it to rank you for legitimacy queries. Generative engines need it to cite you when someone asks whether you are licensed. Both are reading the same HTML, before JavaScript runs, looking for facts they can verify.
Which is why fintech SEO and Generative Engine Optimization for financial services are not competing investments. The technical work serves both, and skipping it means neither can function however much content you publish.
I wrote about Indonesian trust signals and their structured-data implications in Found Before They Search, because international SEO frameworks kept skipping the regulatory layer entirely, treating OJK licensing as a local curiosity rather than as the query that decides whether anyone trusts your page. The companion volume, Cited or Silent, covers how generative engines evaluate verifiable facts when choosing what to cite. Both are free as gated editions, and both are published in paperback and hardcover and listed on Google Play Books and Apple Books.
Start With the Footer
Find the badge. Look at its alt text.
Replace "berizin OJK" with your actual registration number.
That single change takes two minutes, requires nobody's approval, and makes the most important fact about your institution readable by every system that decides whether a borrower ever sees you.
Then do the rate table.
Frequently Asked Questions
Is putting our OJK licence number in an image actually a problem?
Yes, and it is one of the most common failures in Indonesian financial SEO. Google cannot read it. Google Lens cannot read it. No AI crawler can read it. The alt text typically says "berizin" or "terdaftar", which every fraudulent site also says. Publishing the registration number as text in body copy, in structured data, and in the alt attribute makes it a verifiable fact that engines can cite.
Why can Google not index our interest rate tables?
If the table is rendered by JavaScript after page load, crawlers reading the server-side HTML see an empty container. Your rates are legally displayed to a human and commercially invisible to every search engine and AI crawler. Comparison aggregators typically hardcode their tables because they update monthly rather than continuously, which is why theirs get indexed and yours do not.
How do I check whether our licence number is visible to Google?
Right-click the page, select View Page Source rather than Inspect Element, and use your browser's find function to search for the number. View Source shows what the server sent. Inspect Element shows what JavaScript built afterwards, which crawlers never see. If the number does not appear in View Source, it is invisible.
What structured data should carry the licence?
FinancialService or Organization schema, with the registration number inside a PropertyValue identifier, a hasCredential block naming OJK as the recognising body, and a sameAs reference linking to OJK's public directory. The sameAs reference is what lets an engine connect your claim to the regulator's own record, turning an assertion into a verifiable fact.
Do loan calculators inside iframes get indexed?
No. An iframe loads a separate document, and its content does not contribute to the page containing it. The most linkable asset on a financial product page typically contributes nothing to that page's ranking. Building calculators in-page rather than in an iframe solves it.
Does any of this require legal approval?
Publishing your licence number as text does not, because you are not making a claim. You are stating a registration that OJK publishes in a public directory. Adding it to structured data is a development task. Rendering rate tables server-side is an engineering task with a clear specification. None of it enters the review queue that slows other financial content.
Sources & References:
- OJK Satgas PASTI - 14,005 illegal financial entities blocked since 2017, cumulative figure.
- Otoritas Jasa Keuangan - public directory of licensed financial service providers.
- Aggarwal, Murahari, Rajpurohit, Kalyan, Narasimhan, Deshpande - "GEO: Generative Engine Optimization", ACM SIGKDD 2024, arXiv 2311.09735. Law and Government domain benefited most from added statistics.
- BrightEdge Generative Parser - AI Overview trigger rate on educational finance queries.
- Google Search Quality Rater Guidelines - YMYL classification for financial content.
- Schema.org - FinancialService, Organization, PropertyValue and EducationalOccupationalCredential specifications.
- Arfadia Digital Indonesia - State of SEO Indonesia 2026. arfadia.com/resources