Catalog / beanote.me
65

SEO audit for beanote.me

앱 설치 안내 · beanote

otherNext.js

Health 65/100 (fair) · 17 pages crawled · generated 2026-08-26

Download Markdown report (feed to ChatGPT / Claude / Cursor)

iOS와 Android용 beanote 앱 설치 안내입니다.

Screenshot of beanote.me
17
pages crawled
17
indexable pages
0
errors
57
warnings
138
notices
5
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Duplicate 65 0 20 12
Links 65 0 20 0
Hreflang 82 0 10 0
Content 91 0 5 5
Performance 96 0 2 36
Agent Readiness 100 0 0 1
Cache 100 0 0 17
Crawlability 100 0 0 6
Images 100 0 0 2
Meta Description 100 0 0 5
Security 100 0 0 17
Sitemap 100 0 0 1
Social 100 0 0 17
Structured Data 100 0 0 17
Titles 100 0 0 2
Findings

Warnings (7 rules)

warning Thin content (low word count)

Rule content.thin · Content · 5 occurrence(s)

warning Duplicate page content

Rule duplicate.content · Duplicate · 8 occurrence(s)

warning Duplicate <title> across pages

Rule duplicate.title · Duplicate · 12 occurrence(s)

warning Self hreflang language disagrees with html lang

Rule hreflang.mismatch_html_lang · Hreflang · 10 occurrence(s)

  • https://beanote.me/account-deletion — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://beanote.me/account-deletion?lang=en — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://beanote.me/data-deletion — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://beanote.me/data-deletion?lang=en — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://beanote.me/privacy — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://beanote.me/privacy?lang=en — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://beanote.me/support — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://beanote.me/support?lang=en — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://beanote.me/terms — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.
  • https://beanote.me/terms?lang=en — the self-referencing hreflang is "en" but <html lang> is "ko" — contradictory language signals can make Google distrust the hreflang cluster. Align both to the same BCP-47 language.

warning Hero/LCP image is lazy-loaded (loading=lazy delays LCP)

Rule images.no_lazy_lcp_candidate · Performance · 2 occurrence(s)

  • https://beanote.me/ — the likely hero/LCP image (beanote-app-icon-20260712-d61eb088-512.png) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://beanote.me/install — the likely hero/LCP image (beanote-app-icon-20260712-d61eb088-512.png) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.

warning Orphan page (no internal inlinks)

Rule links.orphan · Links · 5 occurrence(s)

warning Internal link points to a redirect

Rule links.redirect_target · Links · 15 occurrence(s)

Notices (15 rules)

notice No llms.txt for AI agents

Rule agent.llms_txt_missing · Agent Readiness · 1 occurrence(s)

  • https://beanote.me/ — no llms.txt found at the site root — add one so AI agents get a curated site summary

notice Page served uncached (no-store/private or CDN bypass)

Rule cache.not_cacheable · Cache · 17 occurrence(s)

notice Low text-to-HTML ratio

Rule content.low_ratio · Content · 5 occurrence(s)

notice Duplicate meta description across pages

Rule duplicate.meta_desc · Duplicate · 12 occurrence(s)

notice Images without width/height (layout shift / CLS)

Rule images.missing_dimensions · Images · 2 occurrence(s)

notice Meta description too short

Rule meta_desc.too_short · Meta Description · 5 occurrence(s)

notice Legacy image format (jpg/png/gif) with no next-gen fallback

Rule perf.images_legacy_format · Performance · 2 occurrence(s)

  • https://beanote.me/ — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://beanote.me/install — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.

notice No ETag header (no conditional GET for unchanged pages)

Rule perf.no_etag · Performance · 17 occurrence(s)

  • https://beanote.me/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/account-deletion — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/account-deletion?lang=en — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/account-deletion?lang=ko — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/data-deletion — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/data-deletion?lang=en — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/data-deletion?lang=ko — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/install — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/privacy — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/privacy?lang=en — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/privacy?lang=ko — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/support — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/support?lang=en — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/support?lang=ko — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/terms — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/terms?lang=en — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://beanote.me/terms?lang=ko — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.

notice No Last-Modified header (no conditional GET for unchanged pages)

Rule perf.no_last_modified · Performance · 17 occurrence(s)

  • https://beanote.me/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/account-deletion — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/account-deletion?lang=en — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/account-deletion?lang=ko — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/data-deletion — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/data-deletion?lang=en — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/data-deletion?lang=ko — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/install — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/privacy — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/privacy?lang=en — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/privacy?lang=ko — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/support — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/support?lang=en — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/support?lang=ko — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/terms — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/terms?lang=en — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://beanote.me/terms?lang=ko — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.

notice URL redirects to another URL

Rule redirect.single · Crawlability · 6 occurrence(s)

notice Missing recommended security headers

Rule security.missing_headers · Security · 17 occurrence(s)

notice Indexable page not listed in sitemap

Rule sitemap.orphan_not_listed · Sitemap · 1 occurrence(s)

notice Title is very short

Rule title.too_short · Titles · 2 occurrence(s)

Pages (showing 17 of 17)
URLStatusIndexableWordsIn-links
https://beanote.me/
앱 설치 안내 · beanote
200 yes 65 15
https://beanote.me/privacy?lang=ko
개인정보 처리방침 · beanote
200 yes 2321 9
https://beanote.me/support?lang=ko
고객지원 · beanote
200 yes 347 9
https://beanote.me/terms?lang=ko
이용약관 · beanote
200 yes 1537 9
https://beanote.me/account-deletion?lang=ko
계정 삭제 · beanote
200 yes 100 6
https://beanote.me/privacy?lang=en
Privacy Policy · beanote
200 yes 3199 11
https://beanote.me/support?lang=en
Support · beanote
200 yes 519 11
https://beanote.me/terms?lang=en
Terms of Service · beanote
200 yes 2181 11
https://beanote.me/account-deletion?lang=en
Delete account · beanote
200 yes 137 8
https://beanote.me/data-deletion?lang=en
Delete a coffee record · beanote
200 yes 352 3
https://beanote.me/data-deletion?lang=ko
커피 기록 삭제 · beanote
200 yes 244 3
https://beanote.me/account-deletion
Delete account · beanote
200 yes 137 0
https://beanote.me/data-deletion
Delete a coffee record · beanote
200 yes 352 0
https://beanote.me/install
앱 설치 안내 · beanote
200 yes 65 0
https://beanote.me/privacy
Privacy Policy · beanote
200 yes 3199 0
https://beanote.me/support
Support · beanote
200 yes 519 0
https://beanote.me/terms
Terms of Service · beanote
200 yes 2181 0

Audit your own site — free

157 checks, internal PageRank, render-diff. No signup, results in ~30s.

Scan your site →