How to Use the Google Indexing API Without Writing Code
This guide is for site owners, editors, and marketers who want to use the Google Indexing API without writing Python, PHP, or Node. You will learn what no code really means in this context, which pages Google officially supports, how to create a service account with clicks only, and how to submit URLs through a dashboard, a spreadsheet, or a copy paste cURL template. The focus keyword is indexing api without coding, and the steps keep keys private, quotas safe, and logs readable. No build tools or servers are required beyond a browser and access to Search Console.
Key takeaways
- No code still requires a Google Cloud service account and Search Console Owner access, since those prove you own the URLs.
- Google officially supports JobPosting and BroadcastEvent pages only, so normal posts are off label use with no guaranteed crawl.
- Bring your own key dashboards let you paste a JSON key and submit CSV lists without writing backend code.
- Submit only changed URLs, pace sends, and treat 429 as a signal to pause, not to retry faster.
- Keep sitemaps, internal links, and IndexNow for Bing in parallel, since API pings complement those paths.
- What no code means for this API
- What Google supports and what to expect
- What you need before you submit anything
- Create a service account with clicks only
- Connect the service account to Search Console
- Submit with a BYOK dashboard
- Submit with Sheets and copy paste templates
- Submit with cURL templates and Postman
- Stay inside quotas without code
- Verify submissions and read status
- Keep keys safe and know when to switch to code
- FAQ
- Sources
- Further reading
<!-- IMAGE-PROMPT cover: 1200x630, DependsIt brand, deep charcoal #121212 or clean white background, vibrant mint #22E3B0 accent glow, thin node-network line art, Clash Display style bold heading space on left, General Sans clean labels, subject: no code dashboard uploading key and submitting URLs, flat vector, high contrast, accessible, no photorealistic faces, no text smaller than 24px, no em dash in rendered text, export PNG then cwebp -q 82 to WEBP -->
What no code means for this API
No code for the Google Indexing API means you do not write backend logic for JWT signing, token caching, or HTTP retries. You still complete setup clicks in Google Cloud and Search Console, and you still handle a JSON key file with care. A dashboard, spreadsheet addon, or API client does the signing and request formatting for you. In practical terms, you upload or paste your service account JSON once into a trusted interface, paste a list of URLs, choose URL_UPDATED or URL_DELETED, and press submit. The tool exchanges the key for a short lived access token, sends one POST per URL, and shows status codes and notifyTime values in a table.
This model suits owners who publish a few times per week and who want a clear record without maintaining code. Editors can submit a new post URL in under two minutes after publish. Marketers can submit an updated landing page after a content refresh. Site managers can remove deleted job pages with URL_DELETED when listings expire. The trade off is control and scale. Dashboards often lack queues, scheduling, and automatic retries, so bulk jobs and daily automation still need code or a purpose built worker. There is also trust to consider, since pasting a service account key into any web tool grants publish rights for your property until you rotate the key.
A simple indexing api tool for this job shows a single submit url to google no code form where you paste URLs and pick a type, while a fuller indexing api interface adds CSV upload, history and retry buttons. Either way, easy indexing submission still means one POST per URL with pauses, so keep batches small and record results in your sheet.
Three no code paths cover most needs. First, bring your own key dashboards where the key stays in your browser session or in your own workspace and submissions run from your account. Second, spreadsheet flows where a sheet holds URLs and a bound script or addon sends them with pacing. Third, API clients such as Postman or ready made cURL commands where you paste a token obtained from a helper page and send requests without writing a program. Each path still respects the same quotas and permission model, so pick based on volume, team skill, and key handling policy. For context on manual Search Console submission limits, review the comparison of Indexing API versus Request Indexing.
No code does not remove the need for sitemaps and links. After you submit through a dashboard, keep the XML sitemap lastmod accurate, link new posts from relevant hubs, and keep canonical tags consistent. Those signals help Google prioritize crawls every day, while API pings act as hints. If your stack is WordPress and you later want automation, the code path in WordPress without a plugin shows how the same service account moves from manual clicks to hooks.
| Path | You handle | Suitable volume |
|---|---|---|
| BYOK dashboard | Key upload, URL list, type choice | 1 to 50 URLs per day |
| Sheet plus addon | URL table, pacing, status column | 10 to 200 URLs per batch |
| Postman or cURL template | Token paste, request per URL | Testing and small fixes |
What Google supports and what to expect
Google documents the Indexing API for JobPosting pages and BroadcastEvent pages inside VideoObject, usually livestreams. Those types may trigger a fresh crawl after URL_UPDATED or removal handling after URL_DELETED. Normal blog posts, product pages, category pages, and portfolio items sit outside documented support. Dashboards that promise instant indexing for any URL type overstate the effect. A 200 response with urlNotificationMetadata means Google received the hint, not that Google will crawl, index, or rank the URL. Set that expectation with stakeholders before you submit.
Google does not support IndexNow. IndexNow serves Bing, Yandex, Naver, Seznam, and other participating engines through a simple key file at the site root. It never sends data to Google. If Bing traffic matters, run IndexNow in parallel with separate submissions and logs. For Google, the only no code inputs are the Indexing API publish endpoint, sitemaps, and Search Console inspection requests. The official scope and setup are listed in the Indexing API prerequisites, which remains the reference when tool marketing and docs disagree.
Expect different outcomes by content type. A job board with valid JobPosting markup often sees crawl activity soon after URL_UPDATED, especially for new jobs linked from category pages. A livestream page with BroadcastEvent markup benefits from updates when schedules change. A standard blog post may see no visible change, since crawl priority depends on site authority, internal links, sitemap freshness, and content evaluation. Treat no code submissions as one input among many, and measure with Search Console coverage, server logs, and lastmod consistency rather than with tool success counters alone.
Policy matters for off label use. Submitting normal pages is not documented, and Google can ignore hints without error. Avoid resubmitting unchanged URLs daily to force crawls, since that wastes quota and adds noise. Avoid submitting URLs you do not own, preview domains, staging hosts, or parameter variants that canonicalize elsewhere. Submit canonical public URLs only, with https, correct host, and trailing slash behavior matching your site. For an honest discussion of normal pages, read the honest answer on normal pages.
| Content | Official support | No code action |
|---|---|---|
| JobPosting with markup | Yes | Submit on publish and on expiry |
| BroadcastEvent livestream | Yes | Submit on schedule change |
| Standard post or page | Not documented | Optional hint, monitor coverage |
| Deleted or expired URL | Yes for supported types | URL_DELETED when URL returns 404 or 410 |
What you need before you submit anything
You need four items before any dashboard can help: a Google account that can create Cloud projects, a Cloud project with the Indexing API enabled, a service account JSON key, and Search Console Owner access for the service account on the exact property. You also need a clean list of canonical URLs to submit, plus a decision on notification type per URL. URL_UPDATED fits new and materially updated pages. URL_DELETED fits removed pages that now return 404 or 410. Do not mix types in one batch without labeling, since review becomes harder.
Prepare your URL list in a spreadsheet with columns for URL, type, date added, status code, notifyTime, and notes. Normalize hosts first. If your canonical host is https://example.com without www, convert all rows to that form and drop http variants, www variants, and trailing slash mismatches. Remove preview links, draft links with query strings, and parameterized duplicates. Keep the list to changed URLs only. A new post, a price or availability change on a job page, or a removed listing belongs on the list. A sitewide template tweak with no URL level change does not need per URL pings.
Confirm Search Console property form. Domain properties cover all subdomains and protocols through DNS verification. URL prefix properties cover one exact prefix. The service account must hold Owner on the property that contains your URLs. Keep a one page access note with property type, canonical home URL, Cloud project ID, service account email, key creation date, and key holder. This note speeds up troubleshooting when 403 appears later after a host move or CDN hostname change.
Check quota expectations. Many new projects report around 200 publish requests per day plus per minute limits that return 429 on bursts. Plan batches of 10 to 20 with pauses, and stop at 80 percent of known quota to leave room for urgent fixes. No code tools rarely show quota headers clearly, so track sends per day in your sheet and note the reset window.
| Item | Example | Ready when |
|---|---|---|
| Cloud project | example-com-indexing | Indexing API shows enabled |
| Service account | submitter@project.iam.gserviceaccount.com | JSON key downloaded once |
| Search Console | https://example.com/ prefix | Service account listed as Owner |
| URL sheet | 25 canonical rows with types | Hosts normalized, drafts removed |
Create a service account with clicks only
Open the Google Cloud Console, create a new project named for the site, then open APIs and Services, then Library, search for Indexing API, and select Enable. This step is per project, so staging and production need separate projects if you isolate them. Next open IAM and Admin, then Service Accounts, then Create Service Account. Give it a clear name such as no-code-submitter, add a description with site and owner, then create without granting broad project roles. The console generates an email ending in iam.gserviceaccount.com. Copy that email for Search Console.
Create the JSON key with Keys, then Add Key, then Create New Key, then JSON. The browser downloads one file containing private_key, client_email, token_uri, and related fields. Store that file in a password manager or encrypted drive immediately. Do not email it, do not upload it to public storage, and do not paste the full JSON into chat support. You will paste it once into your chosen dashboard or keep it local for cURL flows. Note the creation date in your access note and set a calendar reminder for rotation every 90 to 180 days or on staff changes.
Keep roles minimal. The service account authenticates with the indexing OAuth scope at request time, so it does not need Owner or Editor on the Cloud project. If your org requires temporary admin to create keys, use a short lived session and then remove extra grants. Use one service account per client or per property when you manage several sites, since per site accounts limit blast radius and make per day counts easier to explain. If a contractor leaves, delete that contractor specific key rather than sharing one key across the team.
Verify the project state before submitting. Confirm the Indexing API appears under Enabled APIs, confirm the service account email matches the key client_email, and confirm the system clock on your computer is accurate, since skewed clocks cause token errors even in no code tools. If a dashboard shows failed to parse JWT or invalid grant on first use, re upload the byte exact JSON, check for truncation from copy paste, and confirm the API is enabled in the correct project. The official setup reference is the Indexing API prerequisites, which tracks console label changes better than screenshots in older posts.
# No code users do not run this, but it shows what dashboards do behind the scenes.
# Exchange a JWT assertion for a token, then POST one URL with Bearer auth.
# Keep this as reference when a tool asks you to paste a token manually.
curl -s -X POST "https://oauth2.googleapis.com/token" \
-d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \
-d "assertion=PASTE_JWT_HERE"
Connect the service account to Search Console
Search Console permission is separate from Cloud IAM. Open Search Console, select the exact property with your URLs, open Settings, then Users and permissions, then Add user. Paste the service account email, choose Owner, and save. Owner is required for publish calls. Lower roles will return 403 on every submit. If you use a domain property, add the account at the domain level. If you use URL prefix properties, add it to the canonical prefix that matches your live home URL, including https and www choice. Wait a few minutes for propagation before testing.
Confirm the entry and document it. The user list should show the service account with Owner and a recent added date. Record who approved access and why, especially for client sites. Agencies should prefer per client service accounts over one shared account, since removal is cleaner when engagements end. If the site moves hosts, changes canonical host, or adds a CDN hostname, recheck Users and permissions on the new canonical property, since property mismatch is a frequent cause of sudden 403 across all URLs.
Test with a safe read before any publish. Many dashboards offer a metadata or status check that calls the getMetadata path for a URL you own. That call validates auth without changing anything. A 403 at this stage means Owner is missing or the property string mismatches. A 404 for a never submitted URL is normal and means auth passed. Only after a clean read should you publish a test post URL. Keep the test URL live and public, since submitting a draft or blocked URL adds confusion.
If 403 persists, check four details in order: exact property match including slash and host, Owner role rather than Full, correct Cloud project with API enabled, and correct key file without truncation. Do not retry in a tight loop, since permission errors do not clear with volume. Fix the config, wait a few minutes, then test once more.
<!-- IMAGE-PROMPT diagram-01: 1600px max, DependsIt brand mint #22E3B0 on charcoal #121212 or white, node-network line art, subject: spreadsheet and dashboard to Indexing API submission diagram, flat vector, accessible, no em dash, Clash Display style headings, General Sans clean labels -->
indexing api without coding: submit with a BYOK dashboard
Bring your own key dashboards are the simplest path for non developers. The typical flow has five screens: connect key, verify property, upload URLs, choose type, review results. On connect key, paste the service account JSON or upload the file into the session. Prefer tools that keep the key in your browser session or in your own workspace rather than storing it on shared servers. On verify property, enter the canonical property string exactly as shown in Search Console. On upload, paste 10 to 50 canonical URLs or upload a CSV with url and type columns. On type choice, set URL_UPDATED for new and updated pages and URL_DELETED for removed pages. On review, check per URL status codes and notifyTime values.
Run a first batch of one URL. Publish a test post with a unique slug, submit it as URL_UPDATED, and confirm 200 with metadata. Check that notifyTime is recent and that the echoed URL matches your canonical exactly. Then submit a second test for URL_DELETED only after you move a test page to trash and confirm it returns 404. This two step test validates both notification types and confirms your property match. After that, process real batches in small groups with pauses of 10 to 30 seconds between groups, and record results back into your sheet.
Read result tables with care. Success rows show 200 and a timestamp. Auth rows show 401 or 403 with permission or JWT messages. Quota rows show 429 with quota exceeded or rate limit messages. Request rows show 400 with invalid URL or type. Export results to CSV after each batch and append them to a history tab, since dashboards often paginate or expire history. If a tool shows 200 for every row including invalid hosts, treat that view with doubt and verify with a getMetadata check for one URL.
Protect the key during dashboard use. Use a private browser window on shared machines, revoke sessions after use, and rotate the key if you pasted it into a tool you no longer trust. Prefer workspaces with audit logs that show who submitted which URLs and when. Avoid tools that ask for broad Google Drive or Gmail scopes unrelated to indexing, since the Indexing API needs only the indexing scope plus property ownership. Keep a short list of approved tools and remove access for the rest.
| Step | Action | Check |
|---|---|---|
| Connect | Paste JSON key in session | client_email matches Search Console user |
| Verify | Enter canonical property | Owner visible in Search Console |
| Upload | 10 to 50 canonical URLs | No staging or parameter variants |
| Send | URL_UPDATED or URL_DELETED | 200 with recent notifyTime |
| Record | Export CSV to sheet | Daily count updated |
Submit with Sheets and copy paste templates
Spreadsheets fit teams that already track content in Sheets. Create tabs for Queue, Sent, and Errors. Queue holds url, type, added date, and owner. Sent holds url, type, sent date, code, notifyTime, and batch ID. Errors holds url, type, code, message, and next retry date. Normalize URLs with a formula that forces https and lowercases the host, then filter to canonical rows. Add data validation for type so only URL_UPDATED and URL_DELETED can be entered. This structure keeps batches auditable without code knowledge.
Two automation options exist. The lighter option uses a Sheets addon or extension that sends Indexing API requests with pacing and writes status back to the row. The more transparent option uses Apps Script bound to the sheet with a menu button such as Submit selected rows. Apps Script still involves a small script, but editors only click the menu while one developer pastes the script once. The script reads selected rows, exchanges the service account key for a token, sends one POST per URL with a sleep between calls, and writes code and notifyTime back to the sheet. Keep batch size at 20 or fewer per run and add a daily cap in the script.
If you prefer zero script, use the sheet as a staging list and copy 10 URLs at a time into your BYOK dashboard. This manual copy keeps auth in the dashboard while the sheet remains the source of truth. Add a sent flag and date to avoid resubmitting the same rows. Sort Queue by priority so new jobs or time sensitive updates go first when quota is tight. Archive Sent rows monthly to keep the sheet fast, but keep Errors for 90 days to spot patterns such as repeated 403 for one property or 400 for malformed URLs.
// Apps Script sketch for editors. Developer pastes once, editors click menu.
// Reads column A URL and column B type for selected rows, sends with pacing.
function submitSelectedRows() {
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getActiveRange().getValues();
rows.forEach(function(r, i) {
var url = String(r[0]).trim();
var type = String(r[1]).trim();
// Exchange service account key for token, POST to publish path,
// write status code and notifyTime back to columns C and D.
Utilities.sleep(2000);
});
}
Validate sheet data before sending. Check for missing https, spaces, line breaks, uppercase hosts, and trailing spaces from copy paste. Reject preview URLs containing preview=true, staging hosts, and localhost. Confirm each URL returns 200 in a browser or with a header check, and confirm deleted URLs return 404 or 410 before using URL_DELETED. These checks take minutes and prevent a batch of 400 errors that waste time and quota.
Submit with cURL templates and Postman
cURL templates and Postman suit owners who can paste commands but do not want a codebase. The flow has three steps: obtain an access token with a helper, send one POST per URL with Bearer auth, and inspect the JSON response. Many teams obtain the token from their dashboard helper page or from a one time Apps Script run, then paste it into Postman as a Bearer token or into a cURL header. Tokens last about one hour, so complete your batch promptly and request a fresh token if you see invalid token errors.
In Postman, create a collection with two requests: metadata check and publish. Metadata check posts to the metadata path with body containing url. Publish posts to the publish path with body containing url and type. Set headers for Content Type application/json and Authorization Bearer with your token variable. Send the metadata check first for one URL to confirm auth. Then send publish for the same test URL and confirm 200 with urlNotificationMetadata. Save responses as examples so teammates see expected shapes. Keep environments per property such as production and staging to avoid cross posting.
With cURL, use a template file with placeholders for token and URL, then copy one command per URL. Send requests one at a time with a pause between them. Log each command result with timestamp, URL, and code in your sheet. Avoid shell history on shared machines by reading the token from an environment variable rather than typing it into the command line with echo. On Windows, use PowerShell Invoke RestMethod equivalents if curl is unavailable, but keep the same JSON body structure.
# Publish one URL. Replace TOKEN and URL. Send one at a time with pauses.
curl -s -X POST "https://indexing.googleapis.com/v3/urlNotifications:publish" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer TOKEN" \
-d '{"url":"https://example.com/new-post-slug/","type":"URL_UPDATED"}'
Handle errors without code by mapping codes to actions. A 200 means received, so record notifyTime and move on. A 400 means fix the URL or type and resend once. A 403 means fix Search Console Owner or property match before any resend. A 404 on metadata means no history yet, which is normal for new URLs. A 429 means pause for several minutes, reduce batch size, and resume later. A 5xx means wait and retry once after a few minutes.
<!-- IMAGE-PROMPT workflow-02: 1600px max, DependsIt brand, subject: no code batch workflow with pacing and verification steps, flat vector, accessible, no em dash, mint #22E3B0 on charcoal #121212, node-network line art, Clash Display style headings, General Sans clean labels -->
Stay inside quotas without code
Quotas apply no matter which interface you use. Treat your daily publish budget as a hard ceiling and track usage in your sheet with a simple counter per date. When you approach 80 percent of known quota, stop routine sends and reserve room for urgent fixes. Space batches through the day rather than sending everything at 9 AM, since per minute limits trigger 429 on bursts even when daily quota remains. A practical manual rhythm is 10 URLs, pause two minutes, next 10, with a longer pause after any 429. Never loop resends quickly after a throttle, since that extends the wait.
Prioritize when backlog exceeds budget. New job posts with expiry dates go first, followed by time sensitive updates such as schedule changes, then standard updates, then low value tweaks. Skip unchanged URLs entirely. If an import added 500 URLs in one day, do not attempt all 500 through a dashboard in one sitting. Select the top 50 by business value, update sitemaps and internal links for the rest, and spread the remainder over several days. This triage respects quota while giving important pages the earliest hint.
Watch for 429 patterns. A single 429 after 20 fast sends means slow down. Repeated 429 across hours means daily quota is near exhaustion, so stop and resume next day. Some tools hide Retry After hints, so default to a 10 minute pause after the first 429 and a 60 minute pause after the second in the same hour. Record 429 events in your Errors tab with timestamp and batch size, since that history informs future batch sizing.
| Signal | Meaning | Manual action |
|---|---|---|
| 200 with notifyTime | Received | Record and continue with pauses |
| 429 after burst | Per minute limit | Pause 10 min, halve batch size |
| 429 across hours | Daily quota low | Stop, resume next day |
| 403 permission denied | Owner or property issue | Fix config, do not retry blindly |
| 400 invalid URL | Malformed or non canonical | Fix URL, resend once |
Verify submissions and read status
Verification has two layers: receipt and effect. Receipt means Google accepted the notification, shown by 200 and notifyTime. Effect means Google crawled or indexed the URL later, shown by Search Console coverage, URL Inspection, and server logs. No code tools show receipt well but rarely show effect, so check effect yourself. After a batch, record notifyTime per URL, then check coverage over the next days for submitted versus non submitted cohorts. Look for crawl hits from Googlebot in server logs for submitted URLs within hours or days, but treat timing as indicative.
Use getMetadata for spot checks. Many dashboards include a status or history button that fetches notification metadata for one URL. A recent notifyTime confirms receipt. Fields for latestUpdate and latestRemove help distinguish update versus delete history. A 404 means no history for that URL, which is normal before first submit. Check once per URL after sending, not in a loop, and avoid polling every hour.
Cross check with Search Console. Use URL Inspection for a sample of submitted URLs to see last crawl time and index state. Compare sitemap lastmod dates with actual file dates, since mismatched lastmod undermines trust. Confirm internal links point to new URLs from crawlable hubs, since isolated pages with no inlinks crawl slower even after a ping. If coverage shows discovered but not indexed for many new posts, the limit is prioritization or content evaluation, not delivery. Improve depth, uniqueness, and internal linking before increasing ping volume.
Keep a weekly review habit. Every Monday, note sends per day, 200 rate, 429 count, 403 count, and median time from submit to first Googlebot hit for a sample. If 200 rate drops, check keys and property access first. If crawl lag grows while 200 rate stays high, shift effort to sitemaps and links rather than more pings. This short review turns no code submission from button pressing into a stable routine with clear signals.
Keep keys safe and know when to switch to code
Service account keys grant publish rights, so handle them like passwords. Store the JSON in a password manager, restrict who can view it, and avoid pasting it into public demos, tickets, or shared docs. Prefer dashboards that use session scoped keys and show audit logs. When a team member leaves or a tool trial ends, rotate the key: create a new key, update the approved tool, verify one 200, then delete the old key. Keep both keys valid for a short overlap of 24 to 48 hours, then remove the old one and note the date.
Watch for signs that no code no longer fits. Daily volume above 100 URLs, need for automatic publish on CMS events, need for retries and dead letter review, or need for per property reporting all point toward code or a dedicated worker. At that stage, move the same service account into a small script or into the WordPress hook path, keep the sheet as a reporting view, and keep dashboards for ad hoc fixes. The migration is straightforward because auth and property setup stay the same, only the sender changes from clicks to scheduled calls.
Maintain hygiene in parallel. Keep robots.txt from blocking new paths, keep canonical tags self referencing, keep sitemaps clean of 404s, and keep deleted URLs returning 404 or 410 before sending URL_DELETED. Review Search Console users quarterly and remove stale owners. These habits matter more than tool choice over a full year.
| Practice | Frequency | Owner |
|---|---|---|
| Rotate JSON key | Every 90 to 180 days | Site admin |
| Review Search Console users | Quarterly | Site owner |
| Audit dashboard access | On staff change | Admin |
| Review quota and errors | Weekly | Editor plus admin |
FAQ
Do I need a developer to use the Indexing API?
No for small volumes. You need clicks in Cloud Console and Search Console plus a dashboard or template to send requests. Developers become useful when volume grows, when you want automatic sends on publish, or when you need queues and retries. Many no code seo tools cover the small volume case well, since they let you submit links to google from a sheet or dashboard without maintaining a codebase.
Which pages can I submit without code?
You can technically submit any canonical URL you own, but Google documents support for JobPosting and BroadcastEvent pages only. Normal posts and product pages may return 200 with no visible effect. Keep expectations plain and keep sitemaps current. When you submit links to google for supported job pages, keep the list narrow and canonical, and use no code seo tools only for changed URLs.
Is pasting my JSON key into a dashboard safe?
It grants publish rights for your property, so use trusted tools with session handling and audit logs. Prefer browser session scoped use, revoke after testing, and rotate the key after trials or staff changes. Never share keys in tickets or public docs.
What should I do after a 429 in a dashboard?
Pause, reduce batch size, and resume later. A single burst 429 calls for a 10 minute pause. Repeated 429 across hours means daily quota is low, so stop until next day. Record the event to size future batches.
How do I prove a submission worked?
A 200 with urlNotificationMetadata and recent notifyTime proves receipt. Prove effect with Search Console coverage, URL Inspection last crawl, and server logs for Googlebot hits. Receipt does not guarantee indexing.
Should I use IndexNow too if I use no code tools?
Yes if Bing matters to you. IndexNow targets Bing and other participating engines with a separate key file, while Google does not support it. Run both paths with separate lists and logs, and keep sitemaps for both ecosystems.
Sources
- https://developers.google.com/search/apis/indexing-api/v3/prereqs
- https://developers.google.com/search/apis/indexing-api/v3/quickstart
- https://support.google.com/webmasters/answer/7440203
- https://schema.org/JobPosting