Digital Marketing Strategies
Reaching the right people online and turning attention into something that compounds rather than leaks away.
A running checklist of ways to get this garden more views and more reach, pulled from research and grouped by where the leverage is. Almost all of it is free; items marked (quick win) are the low-effort places to start. It's a list to work through, not a finished playbook.
Crawlability and indexing
This site is a React single-page app, so a search or AI bot that runs no JavaScript can see an empty page. Fixing that is the highest-leverage work on this list.
- Prerender each note to static HTML at build. A build-time step, and the content compiler already runs one, can emit a real HTML file per note so bots read content instead of an empty root div.
- Keep clean path URLs, never hash routes. Paths like
/garden/slugget indexed on their own;#/routes collapse into one page. This garden already does this. (quick win) - Ship real anchor links in the served HTML. Crawlers follow
<a href>, not click handlers, so navigation and internal links have to exist as true links. - Generate an XML sitemap of every note. List each canonical URL with a
lastmoddate; Bing in particular leans on it for discovery. (quick win) - Add a robots.txt that points to the sitemap. One
Sitemap:line, and check no broadDisallowis blocking a search bot. (quick win) - Verify the site in Google Search Console. Free, and it unlocks index coverage, the queries you rank for, and a URL Inspection tool that shows what Googlebot actually rendered. (quick win)
- Verify in Bing Webmaster Tools too. One setup covers Bing, Yahoo and DuckDuckGo, and you can import the Search Console verification. (quick win)
- Ping IndexNow on each publish. A single keyed request tells Bing, DuckDuckGo and Yandex about new or changed notes at once; Google ignores it, but it's free freshness everywhere else.
Titles, meta, and social cards
- Write a unique title per note. A distinct title around 60 characters is the strongest on-page relevance signal and the clickable headline in results. (quick win)
- Write a unique meta description per note. A 150 to 160 character summary lifts click-through even though it isn't itself a ranking factor. (quick win)
- Set a self-referencing canonical link. One canonical per page consolidates signals and stops query strings and trailing slashes spawning duplicate URLs. (quick win)
- Add Open Graph and Twitter card tags. Shared links then render a rich preview instead of a bare URL, which lifts referral clicks. (quick win)
- Auto-generate an OG image per note.
@vercel/ogcan render a branded 1200x630 card from each note's title at the edge; branded previews get far higher share click-through. - Validate cards before promoting. Run a URL through the platform card debuggers so the image and title render right on the first share. (quick win)
Structured data and semantic markup
- Add Article JSON-LD to every note. Include headline, author, datePublished and dateModified; it's the format search and AI crawlers parse most reliably.
- Declare one consistent Person entity. A single author identity with
sameAslinks to your profiles helps engines attribute the whole site to you. - Add BreadcrumbList JSON-LD. It reinforces the site hierarchy for engines even where breadcrumb links no longer show in results.
- Validate with the Rich Results Test. It catches missing required fields before you publish. (quick win)
- Keep schema aligned with visible content. Never mark up facts a reader can't see; that mismatch is the most-penalized structured-data mistake.
- Use one H1 and an ordered heading tree. A single descriptive H1 with logical H2 and H3 nesting helps engines parse each note. (quick win)
- Wrap content in semantic landmarks. Real
main,article,navandtimeelements carry meaning that generic divs don't. (quick win) - Write descriptive image alt text. It aids accessibility and lets images rank in image search; describe the content, not "image". This garden already does it for figures. (quick win)
- Interlink notes with meaningful anchor text. The garden's wikilinks already spread crawl equity and topical context; keep the link text descriptive, never "click here".
Performance and Core Web Vitals
- Hit the Core Web Vitals thresholds. Aim for LCP under 2.5s, INP under 200ms and CLS under 0.1 at the 75th percentile, from real-user data in Search Console.
- Compress images and reserve their space. Serve modern formats, lazy-load below the fold, and set explicit width and height; some notes here ship multi-megabyte PNGs worth shrinking. (quick win)
- Keep the layout responsive and mobile-first. Google indexes mobile-first, so a fluid viewport and tap-friendly text are prerequisites, not extras. (quick win)
- Trim and defer non-critical JavaScript. Smaller bundles and deferred third-party scripts protect INP and speed up first paint on a JS-heavy app.
AI and agent readiness
Tools like isitagentready.com score whether AI systems can find and read a site. For a content site the commerce and protocol checks don't apply; the real wins are crawler access, clean structure, and answer-first writing.
- Allow AI answer bots in robots.txt. Permit OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot and Googlebot so notes stay eligible to be cited. (quick win)
- Decide on training bots separately. You can optionally disallow GPTBot, Google-Extended, ClaudeBot and CCBot to opt out of training while keeping search access.
- Confirm Vercel's edge isn't blocking crawlers. robots.txt and any firewall rules must agree; some configs silently drop AI search bots as scrapers. (quick win)
- Publish an llms.txt index at the root. A markdown table of contents of the best notes gives an agent one-fetch discovery, and the build step can generate it. Treat it as cheap insurance, not a proven lever.
- Offer a markdown version of each note. A
.mdsibling URL, ortext/markdownby content negotiation, hands agents clean text at a fraction of the tokens. - Lead each section with the answer. A direct 40 to 60 word answer up front is what answer engines lift when they cite you. (quick win)
- State facts plainly and cite sources. High fact density with a named source every couple of paragraphs is the strongest citation booster.
- Prefer lists, tables and FAQ blocks. Structured elements dominate AI citations, and question-shaped content with FAQ schema is cited especially often. (quick win)
- Put the year in titles and refresh notes. Answer engines weight recency hard, so date the work and keep it current. (quick win)
Analytics and attribution
Tag outbound links so the analytics can tell you which channel actually sends readers. The common, free way is UTM parameters on the URL:
https://…/garden/a-note?utm_source=linkedin&utm_medium=social&utm_campaign=launch
utm_source: where the traffic comes from (linkedin, newsletter, hackernews).utm_medium: the channel type (social, email, referral).utm_campaign: the specific campaign name.utm_content(optional): tells near-identical links apart, like a header versus footer button.utm_term(optional): mostly for paid-search keywords.
Vercel Web Analytics, already on this site, logs these automatically, and Google's Campaign URL Builder generates the links. Then:
- Write down a UTM naming taxonomy. Keep source, medium and campaign lowercase and consistent so typos don't split one campaign into several. (quick win)
- Give each channel a distinct source. Tag Hacker News, the newsletter, RSS and every social network separately to see what really drives views.
- Layer a cookieless analytics for referrers. Plausible or Fathom give richer referrer and campaign breakdowns than the built-in analytics, with no cookie banner.
- Track events, not just pageviews. Set goals for newsletter signups and outbound clicks so you measure conversion, not raw traffic.
Distribution and syndication
- Publish on your domain first, then syndicate. Give search a week or two to index the original, then cross-post to dev.to, Hashnode or Medium with a canonical pointing back. (quick win)
- Point every syndicated canonical at the original. One hop only; a canonical that points at another canonical breaks the signal.
- On LinkedIn, post a teaser and a link. LinkedIn articles ignore canonical tags, so link back to the original instead of republishing the full text.
- Turn each note into native posts per platform. Adapt the hook and length for X, Bluesky, Mastodon and Threads rather than copy-pasting; this is the social step of the Autonomous Content Pipeline.
- Lead social posts with a hook and add alt text. A strong first line drives algorithmic reach, and image alt text is free reach plus accessibility. (quick win)
Community, email, and cadence
- Submit to Hacker News with a plain title. A neutral, non-hype title fits the norms; stay in the thread to reply, and never ask for upvotes.
- Post to Lobsters and niche subreddits after contributing first. Build a little comment history so you read as a member with a site, and check each place's link rules.
- Share only where you're already a regular. Drop links in on-topic Discord or Slack channels you take part in, not cold.
- Expose a clean RSS or Atom feed. It lets readers subscribe on their terms and feeds newsletters and directories. (quick win)
- Wire RSS to email with Buttondown. New notes then send themselves to subscribers, and it's free under a small list. (quick win)
- Add a small email capture to each note. This garden now does this: a lightweight form adds subscribers to a Resend audience, and ImprovMX catches the replies. See the two-way mail loop.
- Submit to blog directories and a webring. ooh.directory and IndieWeb directories need only a feed and send real readers plus genuine backlinks. (quick win)
- Earn backlinks by guest posting and getting cited. Writing for other dev blogs and answering questions builds authority that aggregators can't.
- Hold a consistent publishing rhythm. Steady output compounds subscribers and search authority; pick a cadence you can keep.
- Reply in every thread you seed. Author presence keeps a post alive and pulls return clicks. (quick win)