Category: Discovery use cases

How to research guest post opportunities

Find publishers that accept contributed articles, confirm the route they published, judge topical fit and record dated evidence before anyone writes a pitch.

By AgentLinkOps editorial team · · 10 min read

How to research guest post opportunities: stacked export sheets with a selected page.

A guest post opportunity is a publisher that accepts an article written by someone outside its staff, on a subject its readers already follow, with an attribution to the author's work. The research job is to find those publishers, confirm the route they published for contributions, judge whether your topic adds anything their archive lacks, and write all of that down with dates before anyone drafts a pitch.

This guide is one of the discovery use cases. It stays on the research side of the line: AgentLinkOps imports your exports, checks selected pages and records evidence. Your agent reads, judges and drafts. You decide whether a request goes out, and it goes out through your own mailbox.

What counts as a real editorial route

Google's 2017 note on article campaigns is still the clearest statement of where the line sits. Google "does not discourage these types of articles in the cases when they inform users, educate another site's audience or bring awareness to your cause or company." The same note lists the factors that turn contributed articles into a link scheme: keyword-rich links stuffed into the articles, the same article published across many sites, writers who do not know the subject, and duplicated or near-duplicated content.

Google's spam policies add the commercial version: "advertorials or native advertising where payment is received for articles that include links" count as link spam unless the links carry rel="sponsored" or rel="nofollow". So a publisher that charges for a "guest post" is selling an advertisement, and the link in it should be qualified as sponsored. Record the fee and the attribute the publisher applies, and let the person who owns the campaign decide whether an advertisement is what they want.

A route is real when the publisher wrote it down: a write-for-us page, contributor guidelines, an editor named on a masthead, or a submission form. A generic contact form is a candidate, not a route. The product's own campaign template for guest contributions asks for "published contribution route or explicit editor interest", and nothing the software can observe decides that criterion. It stays with you.

Find candidates with the files you already have

Start from a target page and the audience it serves. Then open whatever export you already hold.

A supplier backlink export. An Ahrefs, Semrush, Majestic, Moz, DataForSEO or Linkody export of a competitor's referring pages will contain bylined articles on third-party sites. AgentLinkOps imports all six through supplier presets, with two more presets for a Search Console page-pair export and a generic CSV, and an explicit column map for any other layout. An import preview writes nothing and reports every rejected row with its file line and reason. A row in that file tells you a competitor was published there once. It tells you nothing about whether the route is still open.

A Search Console export. The Links report in Search Console exports sample linking pages for one of your target pages, which gives the source-and-target pairs the importer needs. The site-level table that only counts links per linking site is refused by the importer, with the reason: reading counts as rows would invent placements you never observed.

Your agent's own search. Queries such as "write for us" plus your subject, or a site search for contributor guidelines, surface the pages that state a route. This is browser work your agent does with its own tools. Save the page you find; the product's contact research treats paths such as write-for-us, contribute, contributors and guest-posts as contact-shaped candidates when it walks a publisher's site.

Keep every candidate as a source page URL, the target page you would send readers to, the file or query it came from and the date you saw it. The backlink discovery workflow covers this shortlist stage for every job; the import guide covers the preview and rejected rows.

Qualify with the product's three verdicts

The campaign templates that ship with the local toolkit qualify a candidate with three words and no score: satisfied, not_satisfied and agent_judgement. An observation the software holds decides the first two. Nothing observable decides the third, so it is handed to you with the evidence attached. Of the four criteria in the guest contribution template, the software decides zero. That is the honest shape of this job. Each criterion needs a person or an agent reading pages:

Template criterionWhat to recordWho decides
Publisher covers this audienceTwo or three recent articles on your subject, with datesYour agent proposes, you confirm
Recent editorial activityThe newest publication date you can see on the siteYour agent reads it
Published contribution route or explicit editor interestThe URL of the guidelines page or the named editor, and the date you read itYou decide whether it is a route
Proposed topic adds material the site lacksA site search showing no existing article on your angleYour agent researches, you judge

The template also names the rejection reasons: required payment hidden from the campaign owner, an irrelevant audience, and mass-produced guest-post inventory with no editorial review. Write the reason down when you reject a candidate. A rejected candidate with a reason stops the next session from proposing it again.

The contact rule. A contact counts only when the publisher explicitly published it. The hosted contact tool extracts addresses and contact-page URLs from the latest saved copy of a page. The local research walk follows contact-shaped links within a declared page and depth budget, obeys the publisher's robots file, submits no form, constructs no address and marks every address deliverability: not_checked. The documentation puts it plainly: "An observed email address is not a deliverability check. A link labeled “Contact” is a candidate route until someone inspects it."

What the walk found on ten real publishers

On September 11, 2026 the contact research module ran against the ten publishers with the most pages in an owned legal-topic corpus, with the default budget of eight pages and two hops each. Results, as recorded:

MeasureCount
Publishers walked10
Pages attempted38
Pages read33
Pages refused by the publisher's robots file5, all on one publisher
Addresses found17
Publishers with at least one published address7 of 10
Addresses found one hop below the home page11 of 17

Three things in that table matter for guest post research. The page budget stopped one walk with four candidate pages still unvisited, and the record names them; without that field the run would read as a complete answer about a publisher's routes. Five pages were recorded as attempted and refused rather than dropped, so a count of two pages read is visibly a partial read and not a thin site. And two publishers were read completely and published no address at all. That is a not_satisfied observation, which is more useful than a blank: it tells you the route, if one exists, is not on their site.

What your agent does and what you decide

Agent work, with your tools: search for guidelines pages; read the guidelines and any contributor terms; pull two recent articles on the subject and note their dates; check the site for an existing article on your angle; draft a differentiated outline; prepare a note for your review. The template lists the same three tasks: read contribution terms, develop a differentiated outline, and use the existing email tool only when outreach is authorized.

Your decisions: whether a guidelines page is a route or a sales page; whether the audience fit is real; whether a fee makes this an advertisement; whether the outline is worth writing; and whether a request goes out. The local next-action vocabulary has seven values and none of them is a send. The handoff ends at agent_review with the open criteria named and no recommendation attached.

The outreach handoff guide shows what a reviewed draft carries. The publisher relevance guide covers audience fit in more depth.

How AgentLinkOps records the result

Once an article is published with your attribution, the placement becomes a source-and-target pair you can check. A candidate you register starts as not_checked. One explicit selection creates a paused watch and a single metered check; nothing enrolls in monitoring by itself. The recall, verify and monitor pipeline carries a whole shortlist through that check in one bounded batch and converts a present result into a watch that keeps its candidate lineage.

The observation stores a hash of the fetched bytes, the robots posture, the redirect chain and the HTTP status, with a standing note that JavaScript execution and visual visibility were not checked. The page's HTML never enters your repository. The local ledger is plain JSONL in your own repository; cloud sync mirrors that file and never writes back into it. Read the check placement guide for the request sequence.

Two details worth planning for. The verifier reads each link occurrence with its raw rel tokens, so a byline link the publisher marked nofollow or sponsored is recorded as present with those tokens, and you can see the publisher's policy in the evidence rather than in their sales page. And a published article that later redirects to your target is refused as evidence of a link, because a redirect is not a citation.

What can go wrong

The guidelines page is rendered by JavaScript. A plain fetch sees the shell and none of the text. The verifier returns unknown with the reason possible_render_required; on the September 11, 2026 benchmark, 42 of 1,922 pages (2.2 percent) could not be read by a plain fetch. Have your agent open the page in a browser and save what it saw, with the date.

The publisher blocks fetches. A 403, a challenge page or a robots disallow leaves the check unknown with a named reason. Unknown never fails a run and never means anything was removed. It means you have not read the page yet.

A route that used to exist. Publishers close programs. Treat a contribution page older than 90 days as needing a fresh read before you rely on it, and store your own observation time separately from any date the page states.

A competitor's byline is not your eligibility. The template's rejection list says so for competitor-sourced campaigns, and it applies here: a rival's article proves the program existed on the day it was published, nothing more.

A paid program presented as editorial. If the guidelines ask for a fee and the article links are not qualified, you are being sold an advertisement that Google's policy treats as link spam. Record it and let the owner decide.

Where this sits in the product today

Imports, selected candidate checks and placement monitoring run in the invitation-only pilot. Live supplier discovery is disabled in this build and stops with PROVIDER_NOT_CONFIGURED before anything is saved. The contact walk, mention scan and campaign qualification are local research modules, validated against real pages, and not all of them are callable through the hosted endpoint; check the capability status before choosing a workflow. AgentLinkOps sends nothing.

A sibling job is the link insertion review, which covers a paragraph inside an article someone else already wrote. The resource page checklist covers curated lists.

Sources

  1. A reminder about links in large-scale article campaigns · Google Search Central Blog · 2017-05-25
  2. Spam policies for Google web search · Google Search Central · 2026-08-28
  3. Qualify your outbound links to Google · Google Search Central · 2025-12-10
  4. From publisher research to a campaign brief · AgentLinkOps documentation · 2026-09-15