Check these first
Sixty seconds, no AI. Most people are fixed by one of these and never need the prompt below.
- 1
Open the site in a private window. Does it load without logging in? "Site requires login credentials" is one of Google's documented reasons a site connection fails — the crawler hits the wall and gives up.
- 2
Check which URL you gave AdSense. If it was the
*.base44.appone, that is almost certainly your answer. Base44's own docs say the free URLs "are not intended for long-term, production SEO". Connect a custom domain, wait for it to resolve with a valid certificate, and submit that. - 3
Open
yourdomain.com/robots.txt. It should load, and it should not be blocking crawlers. - 4
View source on the homepage. The AdSense snippet has to sit between
<head>and</head>inindex.html— the Code tab. A tag injected from a React component is not in the HTML the crawler first receives. - 5
Open
yourdomain.com/ads.txt. It is a file, not a route. Put it atpublic/ads.txtwith one line:google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0. If it does not render as plain text in a browser, it is not there. - 6
Then wait. Google says review is usually a few days but can take 2–4 weeks, and a new
ads.txtcan take several days — up to a month on a low-traffic site — to be crawled. Do not resubmit in a loop.
Set this in your dashboard
Two dashboard settings matter here, and neither is in the builder chat.
Dashboard → SEO & GEO → Advanced Settings → per-page indexing. Noindex the pages that would embarrass you in a policy review: thank-you pages, checkout confirmations, anything half-built, anything behind a login. AdSense reviews the whole site, and a handful of thin pages is a common reason for a rejection that people then misread as a technical fault.
Dashboard → Domains. Confirm your custom domain is connected and set as the preferred URL. This is the same domain you submit to AdSense — not the *.base44.app one — and getting these two out of step is the single most common cause of "site doesn't exist".
The rest of AdSense setup lives in files, not settings: public/ads.txt and the snippet in index.html via the Code tab.
Why this happens on Base44
Google publishes the reasons a site connection fails: the code is not on pages that get traffic, the code is missing or in the wrong place, the wrong site URL was given at signup, the site is offline or unpublished, the site requires login, or the crawler is blocked by robots.txt.
Read that list next to how a Base44 app ships and it is almost a one-to-one match:
- You get a
*.base44.appURL before you get a domain. It is the URL in front of you when you go to sign up, so it is the one that gets pasted in. It is not the site you own. - The app is still reachable on that subdomain after you add a custom domain. Two live copies of the same site — verify and submit only the one you own.
- Auth is on by default in most templates. Fine for an app, fatal for a crawler. Public pages have to render signed-out.
- Everything is React. Anything you add from inside a component lands after the first HTML response. The AdSense snippet and the verification meta tag both belong in
index.html. - Anything that has to live at the domain root goes in
public/. That is whereads.txt,robots.txtand a Google verification HTML file belong. A React route that renders the text of ads.txt is not an ads.txt file.
The fifth one catches almost everybody, because a route looks like it works — you can open the URL and see the text.
Then run this
Paste into your Base44 builder chat. The first one only reads — it changes nothing, so it is safe to run on a live app.
Open Base44, opens in a new tabBase44 links on this page are affiliate links. If you sign up through one, Dean may earn a commission at no extra cost to you.The audit prompt — read only, changes nothing
Audit this Base44 project for Google AdSense readiness and search crawlability. READ ONLY. Do not edit, create or delete any file. Do not run any build or install step. If you believe something should change, describe it — do not do it. EVIDENCE RULE — this governs everything below. Every finding must carry one of: [CODE] a file path and line number in this project [LIVE] a URL you fetched, with the HTTP status code you received [UNVERIFIED] you could not check it from here You may not report PASS, OK or "looks good" for anything you have not evidenced. If you cannot verify something, the answer is UNVERIFIED. Never guess, and never infer that something works because it is conventional or because the code looks like it should. SCOPE Audit the published site and the project code. Do not stop at the homepage. …
77 lines · 3,596 characters
The fix prompt — run this second
Using the audit you just produced, implement the fixes. The audit was read-only; this turn is the only one that writes. Order: P0 blocks AdSense verification, crawling, indexing, or normal operation P1 SEO, mobile, accessibility, performance, content structure P2 worthwhile, not blocking Implement every P0 and P1 that can be changed safely inside this project. Do not: - modify entity schemas, RLS rules, auth configuration or payment flows - delete pages - add npm packages - redesign working pages or rewrite good copy to chase a score - act on any finding marked UNVERIFIED — list it for me instead After each group of changes, re-read the affected files and confirm the issue is …
27 lines · 1,038 characters
Run this only after you have read the audit above, and only when you are happy for it to change files.
The verification prompt — prove it before you submit
Verify the fixes actually landed. Do not trust the previous turn's report.
FETCH EACH OF THESE FRESH AND REPORT THE RAW RESULT
1. The custom domain root: HTTP status code, and whether it loads signed-out.
2. /ads.txt: status code and the full contents, verbatim.
3. /robots.txt: full contents. Does it allow Googlebot, AdsBot-Google and
Mediapartners-Google?
4. The homepage HTML: is the AdSense script present between <head> and
</head>? Quote the line. Say explicitly whether it is in the served HTML
or injected later by a component.
5. /sitemap.xml: status code and URL count.
For each, say PASS or FAIL against what the fix turn claimed. Where the fetch
and the claim disagree, the fetch wins — say so plainly and show the value.
Anything you could not check from here is UNVERIFIED, never PASS.
THEN, THE ONE THAT DECIDES IT
Count the indexable public routes and the words of main content on each.
…24 lines · 1,199 characters
An agent that reports its own work as done is not evidence. This pass re-checks from outside the change.
What this can’t fix
Three things no prompt can settle for you.
1. Consent, if you have any UK or EU traffic. Google has required a certified CMP integrated with the IAB TCF for serving personalised ads to users in the EEA and the UK since 16 January 2024, and in Switzerland since 31 July 2024. Without one you are not cut off — the traffic stays eligible for non-personalised and limited ads — but you are leaving money on the table.
The part most people have missed: TCF v2.3 became mandatory on 28 February 2026. Consent strings created after that date without the disclosedVendors segment are treated as invalid, and those ad requests fall back to limited ads. If your CMP still emits v2.2 strings, that is a live revenue problem, not a future one. Check with your CMP provider, not with your builder agent — this is not something it can verify.
2. Content volume. A fresh Base44 app is a handful of screens, and AdSense wants "high-quality, original" content that attracts an audience. The audit prompt will count your routes and words for you; it deliberately will not grade them, because that call is yours. If most pages are under 300 words, fix that before you apply — a rejection puts you back in the queue.
3. Search Console. Add the property, submit the sitemap, and run URL Inspection → Test live URL on a couple of real pages to see the HTML Google actually receives. That is the only way to know your pages render for a crawler rather than just for you.
Links you’ll need
- Connect your site to AdSenseThe three verification methods, and Google's own list of why verification fails.
- Ads.txt guideThe exact line format and where the file must live.
- Resolve common ads.txt issuesWhy a file you can see in a browser still shows as missing.
- Google consent requirements for the EEA, UK and SwitzerlandThe certified CMP and IAB TCF rule, straight from Google.
- Google Search ConsoleWhere you confirm what HTML Google actually receives from your pages.
Asked in the Base44 Discord, 14 Sept 2026. Facts on this page verified 14 Sept 2026. v1. Google and Base44 both change things — if something here has gone stale, tell me.