PondPilot SEO Audit Report
Date: 2026-02-17
Auditor: Automated
Site: https://pondpilot.io
pSEO Pages: 41 pages in /pseo/
Overall Score: 62/100
π΄ Critical Issues (Blocking SEO)
1. No robots.txt (CRITICAL)
https://pondpilot.io/robots.txtreturns 404- No
robots.txtfile exists in the repo - Search engines have no crawl directives; sitemap URL not discoverable via robots.txt
- Fix: Create
robots.txtwithSitemap: https://pondpilot.io/sitemap.xml
2. No sitemap.xml (CRITICAL)
https://pondpilot.io/sitemap.xmlreturns 404jekyll-sitemapplugin is configured in_config.ymlbut output is not being generated/deployed- Fix: Verify
jekyll-sitemapis actually generating output. May needgemsinstead ofpluginsdepending on Jekyll version, or GitHub Pages may not support this plugin.
3. No Twitter Card meta tags (CRITICAL)
- Zero
twitter:meta tags on any page - Missing:
twitter:card,twitter:title,twitter:description,twitter:image - Sharing on Twitter/X will show plain links with no preview
- Fix: Add to
_layouts/default.html:<meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="..." /> <meta name="twitter:description" content="..." /> <meta name="twitter:image" content="..." />
4. No canonical URLs (CRITICAL)
- No
<link rel="canonical">tag on any page - Duplicate content risk between
/pageand/page/(trailing slash) jekyll-seo-tagplugin is configured but its output is NOT present in the rendered HTML- Fix: Either make
jekyll-seo-tagwork (add `
` to head), or add canonical manually:
<link rel="canonical" href="https://pondpilot.io/SEO-AUDIT/" />
5. No 404 page
- No
404.htmlor404.mdin the repo - The live 404 shows GitHub Pagesβ default error β unbranded, no navigation back to site
- Fix: Create
404.htmlwith layout, branding, and links back to homepage
6. Blog posts missing meta descriptions
- ALL 10 blog posts lack
descriptionin front matter - The
default.htmllayout falls back topage.excerpt(first paragraph), but this is uncontrolled and often too long/irrelevant - Fix: Add
description:to every blog postβs front matter
π‘ Warnings (Hurting SEO)
7. No structured data / schema markup
- No JSON-LD, Microdata, or RDFa on any page
- Missing
Organization,SoftwareApplication,WebSite,BlogPostingschemas - Rich snippets wonβt appear in search results
- Fix: Add JSON-LD for Organization (homepage) and BlogPosting (blog posts)
8. OG image is an SVG
og:imagepoints to/assets/images/polly.svg- Many social platforms (Facebook, LinkedIn, Twitter) donβt render SVG OG images
- Fix: Create a proper PNG/JPG OG image (1200Γ630px recommended)
9. jekyll-seo-tag plugin configured but not used
- Plugin is in
_config.ymlunderplugins - But `
` tag is NOT in default.html head β the plugin does nothing
- This means canonical URLs, JSON-LD, and twitter cards that
jekyll-seo-tagwould auto-generate are all missing - Fix: Add `
` to the <head> in default.html (this alone fixes issues 3, 4, and 7 partially)
10. Homepage H1 is the logo text βPondPilotβ
- The visible H1 is inside the header/logo, not in page content
- First content heading is H2 (βData tools that respect your privacyβ)
- Fix: Make the main value proposition an H1 in page content
11. Font Awesome loaded from CDN
- Full Font Awesome CSS loaded from
cdnjs.cloudflare.com(~80KB) - Likely only using a few icons β render-blocking external CSS
- Fix: Subset to only needed icons, or use inline SVGs
12. Three external font sources
- Google Fonts, Fontshare, and Google Fonts again (JetBrains Mono)
- Three separate DNS lookups + CSS downloads = render delay
- Fix: Self-host fonts or consolidate sources
13. Some pSEO pages below 300 word target
duckdb-json-query.md(247 words),sql-data-cleaning-tool.md(243 words),parquet-to-csv-converter.md(263 words),local-data-analysis-tool.md(266 words)- Thin content risk for these pages
- Fix: Expand to 300+ words each
14. No internal cross-linking between pSEO pages
- pSEO pages link to
app.pondpilot.io,/widget,/flowscopebut NOT to each other - Internal linking between related pSEO pages would boost topical authority
- Fix: Add 2-3 βRelatedβ links at the bottom of each pSEO page
π’ Good (Whatβs Working)
β Title tags on all pages
- Homepage, /app, /widget, /flowscope, /blog all have unique, descriptive titles
- All 41 pSEO pages have unique title tags in front matter
β Meta descriptions on core pages
- Homepage has a proper meta description
- Product pages (/app, /widget, /flowscope) have descriptions via layout template
β All 41 pSEO pages have complete front matter
- Every page has:
title,description,permalink,layout - No missing fields
β Proper H1 structure on pSEO pages
- All 41 pages have a clear H1 matching the target keyword
β Permalinks are well-structured
- Organized by category:
/use-cases/,/privacy/,/alternatives/,/tools/,/audience/,/duckdb/ - Clean, keyword-rich URLs
β Mobile viewport meta tag present
<meta name="viewport" content="width=device-width, initial-scale=1.0" />β
β Open Graph tags on all pages
og:title,og:description,og:type,og:url,og:imagepresent
β Blog has consistent front matter
- All posts have
title,date,author,image - Blog layout differentiates
og:typeas βarticleβ for posts
β Clean Jekyll config
urlproperly set tohttps://pondpilot.io- Proper permalink structure for blog
β Content quality is high
- pSEO pages are well-written, unique, and substantive
- Good use of SQL code examples throughout
- Natural keyword usage without stuffing
β Skip-to-content link
- Accessibility best practice present
β Analytics present (Cloudflare Web Analytics)
- Privacy-friendly, no Google Analytics β on-brand
π Recommendations (Prioritized)
P0 β Do immediately (biggest SEO impact)
- **Add `
` tag to default.html <head>** β This single change enables canonical URLs, Twitter cards, and JSON-LD from the already-configured jekyll-seo-tag plugin. Remove the manually-written OG tags to avoid duplication (or keep them and let jekyll-seo-tag handle the rest).
- Create
robots.txt:User-agent: * Allow: / Sitemap: https://pondpilot.io/sitemap.xml -
Fix
jekyll-sitemapplugin β Verify itβs generatingsitemap.xml. If GitHub Pages doesnβt support it, generate manually or use a CI step. -
Create
404.htmlwith site branding, navigation, and a search/link to homepage. - Add
description:to all 10 blog posts β Write 150-160 char descriptions for each.
P1 β Do this week
-
Create a proper OG image (PNG, 1200Γ630) instead of the SVG logo.
-
Expand thin pSEO pages β Add 50-80 more words to the 4 pages under 270 words.
-
Add internal cross-links between related pSEO pages (e.g., βSee also: DuckDB CSV Queryβ).
-
Add JSON-LD structured data:
Organizationschema on homepageSoftwareApplicationschema on /appBlogPostingschema on blog posts (ifjekyll-seo-tagdoesnβt handle it)
P2 β Do this month
-
Self-host fonts to eliminate 3 external font DNS lookups.
-
Subset Font Awesome to only used icons.
-
Add blog post dates to structured data for freshness signals.
-
Submit sitemap to Google Search Console once it exists.
-
Create a βhubβ page linking to all pSEO pages (e.g.,
/resources/or/guides/) for crawl discovery.
π Keyword Coverage Analysis
All 41 pSEO Target Keywords
| Category | Keywords |
|---|---|
| DuckDB-specific (6) | duckdb browser tool, duckdb csv query, duckdb json query, duckdb online playground, duckdb parquet viewer, duckdb wasm sql editor |
| Use cases (12) | analyze csv in browser, browser sql analytics, compare datasets in browser, csv to sql online, explore json data locally, interactive sql tutorial embed, open source sql editor, parquet to csv converter, personal finance data analysis, query parquet files online, sql data cleaning tool, sql playground no signup |
| Privacy-focused (6) | air-gapped data analysis, data analysis without uploading, gdpr compliant data tool, local data analysis tool, no-cloud sql editor, offline data analysis tool, private data exploration |
| Alternatives (5) | datasette alternative, db fiddle alternative, excel alternative data analysis, google sheets alternative private, jupyter notebook alternative sql, mode analytics alternative |
| Tools (5) | column-level lineage tool, data quality check tool, embed sql in documentation, interactive sql blog widget, sql editor for documentation, sql lineage visualization |
| Audience (4) | data analysis for startups, data tools for journalists, sql explorer for students, sql tool for product managers |
Notable Keyword Gaps
- βduckdb tutorialβ β high-volume search, not targeted
- βsql editor online freeβ β very high volume, no exact match page
- βcsv viewer onlineβ β common query, no page
- βparquet viewer onlineβ β close to existing but not exact match
- βwasm databaseβ or βbrowser databaseβ β technical audience terms
- βanalyze excel files with sqlβ β Excel is mentioned but .xlsx file support isnβt targeted
- βsql ide browserβ β developer-oriented term
- βdata anonymization toolβ β privacy adjacent, good fit
- βsql formatter onlineβ β tangential but high traffic
- βcompare csv filesβ β simpler version of existing page keyword
Keyword Strategy Score: 7.5/10
Strong long-tail targeting across privacy, DuckDB, and use-case categories. Good competitor alternative pages. Missing some high-volume head terms and a few obvious DuckDB-adjacent keywords.
π pSEO Page-by-Page Checklist
| Filename | Title | Description | Permalink | H1 | Words | Status |
|---|---|---|---|---|---|---|
| air-gapped-data-analysis.md | β | β | β | β | 284 | β OK |
| analyze-csv-in-browser.md | β | β | β | β | 297 | β OK |
| browser-sql-analytics.md | β | β | β | β | 277 | β OK |
| column-level-lineage-tool.md | β | β | β | β | 296 | β OK |
| compare-datasets-in-browser.md | β | β | β | β | 291 | β OK |
| csv-to-sql-online.md | β | β | β | β | 277 | β OK |
| data-analysis-for-startups.md | β | β | β | β | 303 | β OK |
| data-analysis-without-uploading.md | β | β | β | β | 291 | β OK |
| data-quality-check-tool.md | β | β | β | β | 280 | β OK |
| data-tools-for-journalists.md | β | β | β | β | 304 | β OK |
| datasette-alternative.md | β | β | β | β | 299 | β OK |
| db-fiddle-alternative.md | β | β | β | β | 303 | β OK |
| duckdb-browser-tool.md | β | β | β | β | 296 | β OK |
| duckdb-csv-query.md | β | β | β | β | 283 | β OK |
| duckdb-json-query.md | β | β | β | β | 247 | β οΈ Thin (<270) |
| duckdb-online-playground.md | β | β | β | β | 274 | β OK |
| duckdb-parquet-viewer.md | β | β | β | β | 289 | β OK |
| duckdb-wasm-sql-editor.md | β | β | β | β | 291 | β OK |
| embed-sql-in-documentation.md | β | β | β | β | 287 | β OK |
| excel-alternative-data-analysis.md | β | β | β | β | 335 | β OK |
| explore-json-data-locally.md | β | β | β | β | 271 | β OK |
| gdpr-compliant-data-tool.md | β | β | β | β | 292 | β OK |
| google-sheets-alternative-private.md | β | β | β | β | 320 | β OK |
| interactive-sql-blog-widget.md | β | β | β | β | 317 | β OK |
| interactive-sql-tutorial-embed.md | β | β | β | β | 295 | β OK |
| jupyter-notebook-alternative-sql.md | β | β | β | β | 299 | β OK |
| local-data-analysis-tool.md | β | β | β | β | 266 | β οΈ Thin (<270) |
| mode-analytics-alternative.md | β | β | β | β | 306 | β OK |
| no-cloud-sql-editor.md | β | β | β | β | 287 | β OK |
| offline-data-analysis-tool.md | β | β | β | β | 283 | β OK |
| open-source-sql-editor.md | β | β | β | β | 285 | β OK |
| parquet-to-csv-converter.md | β | β | β | β | 263 | β οΈ Thin (<270) |
| personal-finance-data-analysis.md | β | β | β | β | 290 | β OK |
| private-data-exploration.md | β | β | β | β | 284 | β OK |
| query-parquet-files-online.md | β | β | β | β | 272 | β OK |
| sql-data-cleaning-tool.md | β | β | β | β | 243 | β οΈ Thin (<270) |
| sql-editor-for-documentation.md | β | β | β | β | 282 | β OK |
| sql-explorer-for-students.md | β | β | β | β | 308 | β OK |
| sql-lineage-visualization.md | β | β | β | β | 280 | β OK |
| sql-playground-no-signup.md | β | β | β | β | 293 | β OK |
| sql-tool-for-product-managers.md | β | β | β | β | 336 | β OK |
Summary: 41/41 have title, description, permalink, H1. 4/41 flagged as thin content. 0 duplicates found. All CTAs link to valid URLs (app.pondpilot.io, /widget, /flowscope).
TL;DR
The pSEO pages are excellent β well-structured, unique, good keywords. The site infrastructure has critical gaps: no robots.txt, no sitemap, no canonical URLs, no Twitter cards. The fastest fix is adding `
` to the layout head (the plugin is already configured but unused) and creating robots.txt + 404 page. These 3 changes would move the score from 62 to ~80.