browser-backlink-submission — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited browser-backlink-submission (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Given a qualified prospect list and a single source-of-truth site profile, drive each target's submission form to completion, capture evidence, and emit an auditable log. This skill is execution-only — it assumes prospects are already vetted upstream and assumes anchor / description copy is either pre-supplied or fetched via the agent's main loop.
Outcome: a submission-log.json with one row per attempt (status, evidence, live URL once verified) plus screenshots under ./out/backlinks/. No fabricated successes, no fire-and-forget, no link-farm targets ever.
A submission run is a pipeline: profile → per-target field mapping → form drive → evidence capture → verification follow-up. Most failures are not bugs — they are signals: captcha walls, login-required, paid-only, dead form, off-topic category. The skill's job is to detect, classify, and log these honestly so the user gets a reliable picture of what shipped.
Set expectations from Google's spam policies: "low-quality directory or bookmark site links", "using automated programs or services to create links to your site", and optimized anchor text in distributed content are all listed as link spam, and most directories mark outbound links nofollow or ugc anyway. A defensible run is a short list of human-reviewed listings with a real audience — startup and SaaS directories, review sites, business profiles, industry associations — whose value is referral traffic, discovery, and consistent business citations, not PageRank. Submit at human pace, one listing per target, as a person would.
Three immovable invariants:
skipped:quality.submitted row needs a post-submit screenshot and either a confirmation URL or a confirmation-email subject line.The user (or an upstream step) supplies one JSON file. If any required field is missing, stop and ask — do not invent values.
| Field | Required | Notes |
|---|---|---|
name | yes | Brand / site / product name as it should appear |
url | yes | Canonical URL, no UTM, https |
tagline | yes | ≤ 80 chars |
description_short | yes | ≤ 160 chars |
description_long | yes | 300–600 chars, neutral tone |
description_alt | recommended | A second long variant for forms where the first does not fit the field or the category |
category_primary | yes | Map to each directory's taxonomy |
category_alt | recommended | Fallback when primary doesn't exist on a target |
tags | yes | 5–10 keywords, lowercase |
logo_path | yes if any target requires image | Local file; PNG ≥ 256 px square preferred |
screenshot_path | recommended | For directories asking for a product preview |
contact_email | yes | Real, monitored — verification mail lands here |
contact_name | yes | Real human; some directories reject "Admin" |
pricing | recommended | "free" / "freemium" / "paid" — startup directories ask |
founded_year, location, team_size | recommended | Business directories ask |
social.twitter, social.linkedin, social.github | recommended | Many forms require ≥ 1 social URL |
anchors | yes | 1–3 entries: the brand name and the naked URL (optionally brand + product type). Keyword-rich anchors are not used. |
| Target type | Treat as | Notes |
|---|---|---|
| Free general directory (curated, with editorial review and real traffic) | submit | Verify it's still live, indexed, and reviewed by humans |
| Business profile (Google Business Profile, Bing Places, Apple Business Connect, Yelp, BBB) | submit, ownership-verify | Often needs phone, postcard, or video verification — log as pending:ownership-verify; name, address, and phone must match the profile exactly |
| Startup / SaaS directory (BetaList, F6S, AlternativeTo, SaaSHub, Tools Directory style) | submit | Usually needs account + email verify |
| Web2.0 property (Medium, Tumblr, WordPress.com, Notion public pages) | skip | Thin posts created to carry a link are link spam under Google's policies — log skipped:not-a-form |
| Niche industry list (curated GitHub awesome lists, vertical aggregators) | PR / issue, not form | Reroute: open issue / PR — out of this skill's scope, log skipped:not-a-form |
| Q&A / forum (Quora, Reddit, Stack Exchange) | NOT this skill | Persona / on-topic answers are out of scope — log skipped:not-a-form |
| Paid-only ($/listing) | skip unless user pre-approved budget | Log skipped:paid with the price |
| Link farm / "submit to 500 directories" / spammy ad-laden / hidden links / unrelated niche | skip, hard | Log skipped:quality with the reason |
| Captcha-walled (hCaptcha, reCAPTCHA, Cloudflare Turnstile, "verify you are human" pages) | stop and escalate | Do not attempt to bypass. Invisible score-based checks can reject a submit silently — a form that resets or errors with no message after submit counts here too. Log skipped:captcha; the user solves manually if they want |
| Login-required and we have no account | escalate | Either user supplies creds, or log skipped:auth |
name → "Site Name", "Title", "Project", "Tool name", "Company". Match what the form asks; never invent prefixes/suffixes.url → "URL", "Website", "Homepage". Always canonical https; never with tracking params.description_short → "Tagline", "Short description", "Pitch", fields with ≤ 160 char limit.description_long / description_alt → "Description", "About", "Details" (300+ chars). Pick the variant that fits the field and the category.category → match to directory taxonomy by exact label first, then nearest synonym. If nothing fits, pick the closest and log category_mapping.tags → split into the form's expected separator (comma, space, enter-per-tag). Trim to the form's max count.anchors → only used when the target lets you choose anchor text on the link. Use the brand name or the naked URL.logo / screenshot → upload with browser_file_upload (absolute paths) after clicking the file input; verify the upload preview appears before submit../out/backlinks/<domain>-<UTC>.png; capture the confirmation URL or message text../out/backlinks/submission-log.json.skipped:quality)../out/backlinks/submission-log.json is an array of rows. Append-only.
{
"target_url": "https://example-directory.com/submit",
"target_domain": "example-directory.com",
"target_type": "saas-directory",
"submitted_at": "2026-05-10T18:32:11Z",
"status": "submitted | pending:email | pending:ownership-verify | live | rejected | skipped:captcha | skipped:paid | skipped:quality | skipped:auth | skipped:not-a-form | failed:selector | failed:timeout",
"anchor_used": "the brand name",
"description_variant": "long | alt",
"category_mapping": { "requested": "Developer Tools", "selected": "Tools / Dev" },
"live_url": null,
"screenshot_path": "./out/backlinks/example-directory-com-20260510T183211Z.png",
"confirmation_url": null,
"confirmation_email_subject": null,
"notes": "Selector for category was a custom dropdown; mapped Tools → Tools / Dev."
}❌ Bad:
For all 50 directories, rotate keyword anchors ("best project management tool", "PM software") to look natural.✅ Good:
Where anchor text is selectable, use the brand name or naked URL. Submit only to the 12 directories with real traffic and editorial review.What changed: engineered keyword anchors across directories are the link-spam pattern Google's policies name; brand anchors on a few real listings are what a business would do anyway.
The site is a Developer Tools SaaS but the directory only offers Software / Other, Business / Productivity, Lifestyle. Pick Software / Other, record category_mapping: { requested: "Developer Tools", selected: "Software / Other" }, do not pick Business / Productivity because it's slightly broader — closer is better than larger.
Form filled cleanly, "Submit" button reveals an hCaptcha challenge. Stop. Screenshot. Log skipped:captcha. Do not refresh and retry; do not attempt an OCR/solver. Move to the next target.
target_type; link-farm / unrelated targets pre-filtered out./out/backlinks/ exists; previous submission-log.json either rotated or appended to deliberately~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.