인증된 AgentReady.md 증명서
발급일 sig: 9d9f37d066e95579 검증 →

분석된 URL

https://www.jeronimo.dev/

다른 URL 분석

AI-Ready 점수

76 / B

양호

/ 100

토큰 절감량

HTML 토큰 3880
Markdown 토큰 892
절감 77%

점수 상세

시맨틱 HTML 91/100
콘텐츠 효율성 86/100
AI 발견 가능성 50/100
구조화 데이터 67/100
접근성 93/100

사이트에 llms.txt 파일이 없습니다. AI 에이전트가 사이트 구조를 이해하도록 돕는 새로운 표준입니다.

구현 방법

llmstxt.org 사양에 따라 /llms.txt 파일을 만드세요. 사이트 설명과 주요 페이지 링크를 포함하세요.

사이트가 Markdown for Agents를 지원하지 않습니다. 이 Cloudflare 표준을 통해 AI 에이전트가 마크다운 형식으로 콘텐츠를 요청할 수 있으며, 토큰 사용량을 ~80% 줄일 수 있습니다.

구현 방법

다음 중 하나 이상을 구현하세요: (1) Accept: text/markdown에 마크다운 콘텐츠로 응답. (2) .md URL 제공 (예: /page.md). (3) <link rel="alternate" type="text/markdown"> 태그 추가. (4) 마크다운 발견을 위한 Link HTTP 헤더 추가.

Content-Signal 지시어가 발견되지 않았습니다. 이는 AI 에이전트에게 콘텐츠 사용 방법(검색 색인, AI 입력, 훈련 데이터)을 알려줍니다. 권장 위치는 robots.txt입니다.

구현 방법

robots.txt에 Content-Signal을 추가하세요: User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no. 마크다운 응답의 HTTP 헤더로도 추가할 수 있습니다.

제목 구조에 문제가 있습니다 (레벨 건너뛰기 또는 다중 h1 태그). 깔끔한 계층 구조는 AI 에이전트가 콘텐츠 구성을 이해하는 데 도움을 줍니다.

구현 방법

페이지당 정확히 하나의 <h1>을 유지하고, 제목이 순차적 순서를 따르도록 하세요: h1 > h2 > h3. 레벨을 건너뛰지 마세요 (예: h1에서 바로 h3).

Open Graph 태그가 없거나 불완전합니다. OG 태그는 AI 에이전트(및 소셜 플랫폼)가 페이지의 제목, 설명, 이미지를 이해하는 데 도움을 줍니다.

구현 방법

페이지의 <head>에 og:title, og:description, og:image 메타 태그를 추가하세요.

Markdown 토큰: 892
Spring Batch is one of the few existing tools in the Java Enterprise ecosystem for building batch processes or data pipelines. However, its components (ItemReader/ItemWriter) are primarily oriented toward relational databases, CSV, XML, or JSON.

In a world where Data Lakes and columnar formats are increasingly important, integrating Parquet with Spring Batch opens new possibilities for building data pipelines from the Java world, without depending on complex solutions or different technology stacks that often cause friction in the Enterprise world.

This week I released a new version of [Carpet](https://github.com/jerolba/parquet-carpet), the Java library for working with Parquet files. In this version, I’ve added a feature that I believe nobody will ever use: **the ability to read and write BSON-type columns**.

A few days ago, the creators of DuckDB wrote the article: [Query Engines: Gatekeepers of the Parquet File Format](https://duckdb.org/2025/01/22/parquet-encodings.html), which explained how the engines that process Parquet files as SQL tables are blocking the evolution of the format. This is because those engines are not fully supporting the latest specification, and without this support, the rest of the ecosystem has no incentive to adopt it.

Apache Parquet is a columnar storage format optimized for analytical workloads, though it can also be used to store any type of structured data solving multiple use cases.

One of its most notable features is the ability to efficiently compress data using different compression techniques at two stages of its process. This reduces storage costs and improves reading performance.

This article explains file compression in Parquet for Java, provides usage examples, and analyzes its performance.

After some time working with Parquet files in Java using the Parquet Avro library, and studying how it worked, I concluded that despite **being very useful** in multiple use cases and having great potential, **the documentation and ecosystem needed for adoption in the Java world was very poor**.

Many people are using suboptimal solutions (CSV or JSON files), applying more complex solutions (Spark), or using languages they are not familiar with (Python) because they don’t know how to work with Parquet files easily. That’s why I decided to **write this [series of articles](https://www.jeronimo.dev/working-with-parquet-files-in-java/)**.

Once you understand it and have the examples, everything is easier. But, **can it be even easier?** Can we avoid the hassle of using *strange* libraries that serialize other formats? **Yes, it should be even easier.**

That’s why I decided to **implement an Open Source library** that makes working with Parquet from Java extremely simple, something that covers it: **Carpet**.

This post continues the series of articles about working with Parquet files in Java. This time, I’ll explain how to do it using the Protocol Buffers (PB) library.

Finding examples and documentation on how to use Parquet with Avro is challenging, but with **Protocol Buffers, it’s even more complicated**.

In the previous article, I wrote an introduction to using Parquet files in Java, but I did not include any examples. In this article, I will explain how to do this using the Avro library.

Parquet with Avro **is one of the most popular ways to work with Parquet files in Java** due to its simplicity, flexibility, and because it is the library with the most examples.

Parquet is a widely used format in the Data Engineering realm and holds significant potential for traditional Backend applications. This article serves as an **introduction to the format**, including some of the unique challenges I’ve faced while using it, to spare you from similar experiences.

In previous posts I’ve analyzed [Protocol Buffers](https://www.jeronimo.dev/java-serialization-with-protocol-buffers/) and [FlatBuffers](https://www.jeronimo.dev/java-serialization-with-flatbuffers/), using JSON as the baseline. In this post, I will analyze Apache Avro and compare it with the previously studied formats.

In the [previous post](https://www.jeronimo.dev/java-serialization-with-protocol-buffers/) I analyzed Protocol Buffers format, using JSON as baseline. In this post I’m going to analyze FlatBuffers and compare it with previously studied formats.
Spartan Blog - Jerónimo | Jerolba’s blog. Tech, JVM and random stuff.

[![Spartan Blog - Jerónimo](https://www.jeronimo.dev/images/spartan-helmet.png)](https://www.jeronimo.dev/ "Spartan Blog - Jerónimo")# [Spartan Blog - Jerónimo](https://www.jeronimo.dev/)

Jerolba's blog. Tech, JVM and random stuff.

### [Integrating Spring Batch with Parquet](https://www.jeronimo.dev/integrating-spring-batch-with-parquet/)

Spring Batch is one of the few existing tools in the Java Enterprise ecosystem for building batch processes or data pipelines. However, its components (ItemReader/ItemWriter) are primarily oriented toward relational databases, CSV, XML, or JSON.

In a world where Data Lakes and columnar formats are increasingly important, integrating Parquet with Spring Batch opens new possibilities for building data pipelines from the Java world, without depending on complex solutions or different technology stacks that often cause friction in the Enterprise world.

### [The Carpet feature that nobody will use](https://www.jeronimo.dev/the-carpet-feature-that-nobody-will-use/)

This week I released a new version of [Carpet](https://github.com/jerolba/parquet-carpet), the Java library for working with Parquet files. In this version, I’ve added a feature that I believe nobody will ever use: **the ability to read and write BSON-type columns**.

### [The two versions of Parquet](https://www.jeronimo.dev/the-two-versions-of-parquet/)

A few days ago, the creators of DuckDB wrote the article: [Query Engines: Gatekeepers of the Parquet File Format](https://duckdb.org/2025/01/22/parquet-encodings.html), which explained how the engines that process Parquet files as SQL tables are blocking the evolution of the format. This is because those engines are not fully supporting the latest specification, and without this support, the rest of the ecosystem has no incentive to adopt it.

### [Compression algorithms in Parquet](https://www.jeronimo.dev/compression-algorithms-parquet/)

Apache Parquet is a columnar storage format optimized for analytical workloads, though it can also be used to store any type of structured data solving multiple use cases.

One of its most notable features is the ability to efficiently compress data using different compression techniques at two stages of its process. This reduces storage costs and improves reading performance.

This article explains file compression in Parquet for Java, provides usage examples, and analyzes its performance.

### [Working with Parquet files in Java using Parquet Carpet](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-carpet/)

After some time working with Parquet files in Java using the Parquet Avro library, and studying how it worked, I concluded that despite **being very useful** in multiple use cases and having great potential, **the documentation and ecosystem needed for adoption in the Java world was very poor**.

Many people are using suboptimal solutions (CSV or JSON files), applying more complex solutions (Spark), or using languages they are not familiar with (Python) because they don’t know how to work with Parquet files easily. That’s why I decided to **write this [series of articles](https://www.jeronimo.dev/working-with-parquet-files-in-java/)**.

Once you understand it and have the examples, everything is easier. But, **can it be even easier?** Can we avoid the hassle of using *strange* libraries that serialize other formats? **Yes, it should be even easier.**

That’s why I decided to **implement an Open Source library** that makes working with Parquet from Java extremely simple, something that covers it: **Carpet**.

### [Working with Parquet files in Java using Protocol Buffers](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-protocol-buffers/)

This post continues the series of articles about working with Parquet files in Java. This time, I’ll explain how to do it using the Protocol Buffers (PB) library.

Finding examples and documentation on how to use Parquet with Avro is challenging, but with **Protocol Buffers, it’s even more complicated**.

### [Working with Parquet files in Java using Avro](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-avro/)

In the previous article, I wrote an introduction to using Parquet files in Java, but I did not include any examples. In this article, I will explain how to do this using the Avro library.

Parquet with Avro **is one of the most popular ways to work with Parquet files in Java** due to its simplicity, flexibility, and because it is the library with the most examples.

### [Working with Parquet files in Java](https://www.jeronimo.dev/working-with-parquet-files-in-java/)

Parquet is a widely used format in the Data Engineering realm and holds significant potential for traditional Backend applications. This article serves as an **introduction to the format**, including some of the unique challenges I’ve faced while using it, to spare you from similar experiences.

### [Java Serialization with Apache Avro](https://www.jeronimo.dev/java-serialization-with-avro/)

In previous posts I’ve analyzed [Protocol Buffers](https://www.jeronimo.dev/java-serialization-with-protocol-buffers/) and [FlatBuffers](https://www.jeronimo.dev/java-serialization-with-flatbuffers/), using JSON as the baseline. In this post, I will analyze Apache Avro and compare it with the previously studied formats.

### [Java Serialization with Flatbuffers](https://www.jeronimo.dev/java-serialization-with-flatbuffers/)

In the [previous post](https://www.jeronimo.dev/java-serialization-with-protocol-buffers/) I analyzed Protocol Buffers format, using JSON as baseline. In this post I’m going to analyze FlatBuffers and compare it with previously studied formats.

이 파일을 서버의 /index.md에 업로드하여 AI 에이전트가 페이지의 깔끔한 버전에 접근할 수 있게 하세요. Accept: text/markdown 콘텐츠 협상을 설정하여 자동으로 제공할 수도 있습니다.

이 단일 페이지용으로 생성된 llms.txt

llms.txt 다운로드
# Spartan Blog - Jerónimo

> Jerolba’s blog. Tech, JVM and random stuff.

## Main
- [Spartan Blog - Jerónimo](https://www.jeronimo.dev/): Jerolba’s blog. Tech, JVM and random stuff.
- [Integrating Spring Batch with Parquet](https://www.jeronimo.dev/integrating-spring-batch-with-parquet/)
- [The Carpet feature that nobody will use](https://www.jeronimo.dev/the-carpet-feature-that-nobody-will-use/)
- [The two versions of Parquet](https://www.jeronimo.dev/the-two-versions-of-parquet/)
- [Compression algorithms in Parquet](https://www.jeronimo.dev/compression-algorithms-parquet/)
- [Working with Parquet files in Java using Parquet Carpet](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-carpet/)
- [Working with Parquet files in Java using Protocol Buffers](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-protocol-buffers/)
- [Working with Parquet files in Java using Avro](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-avro/)
- [Working with Parquet files in Java](https://www.jeronimo.dev/working-with-parquet-files-in-java/)

전체 llms.txt는 도메인 전체 분석이 필요합니다 (곧 출시)

이 파일을 도메인 루트의 https://www.jeronimo.dev/llms.txt에 업로드하세요. ChatGPT, Claude, Perplexity 등의 AI 에이전트가 이 파일을 확인하여 사이트 구조를 파악합니다.

시맨틱 HTML

article 또는 main 요소 사용 (100/100)

Has both <article> and <main>

올바른 제목 계층 구조 (65/100)

2 <h1> elements (should be 1), 1 heading level skip(s)

시맨틱 HTML 요소 사용 (100/100)

46 semantic elements, 15 divs (ratio: 75%)

의미 있는 이미지 alt 속성 (100/100)

1/1 images with meaningful alt text

낮은 div 중첩 깊이 (100/100)

Avg div depth: 2.2, max: 3

콘텐츠 효율성

양호한 토큰 감소율 (80/100)

77% token reduction (HTML→Markdown)

양호한 콘텐츠 대 잡음 비율 (80/100)

Content ratio: 29.2% (4359 content chars / 14947 HTML bytes)

최소한의 인라인 스타일 (100/100)

0/175 elements with inline styles (0.0%)

적절한 페이지 무게 (100/100)

HTML size: 15KB

AI 발견 가능성

llms.txt 파일 있음 (0/100)

No llms.txt found

robots.txt 파일 있음 (100/100)

robots.txt exists

robots.txt가 AI 봇 허용 (100/100)

All major AI bots allowed

sitemap.xml 있음 (100/100)

Sitemap found

Markdown for Agents 지원 (0/100)

No markdown content negotiation

Content-Signal 있음 (robots.txt 또는 HTTP 헤더) (0/100)

No Content-Signal header

구조화 데이터

Schema.org / JSON-LD 있음 (50/100)

JSON-LD found but basic types: WebSite

Open Graph 태그 있음 (67/100)

2/3 OG tags present

메타 설명 있음 (50/100)

Meta description too short: 43 chars

정규 URL 있음 (100/100)

Canonical URL present

lang 속성 있음 (100/100)

lang="en-US"

접근성

JavaScript 없이 콘텐츠 이용 가능 (100/100)

Content available without JavaScript

적절한 페이지 크기 (100/100)

Page size: 15KB

HTML에서 콘텐츠가 빠른 위치에 배치 (75/100)

Main content starts at 22% of HTML

{
  "url": "https://www.jeronimo.dev/",
  "timestamp": 1771156368416,
  "fetch": {
    "mode": "simple",
    "timeMs": 136,
    "htmlSizeBytes": 14947,
    "supportsMarkdown": false,
    "statusCode": 200
  },
  "extraction": {
    "title": "Spartan Blog - Jerónimo",
    "excerpt": "Jerolba’s blog. Tech, JVM and random stuff.",
    "byline": "Jerónimo López",
    "siteName": "Spartan Blog - Jerónimo",
    "lang": "en-US",
    "contentLength": 4359,
    "metadata": {
      "description": "Jerolba’s blog. Tech, JVM and random stuff.",
      "ogTitle": "Spartan Blog - Jerónimo",
      "ogDescription": "Jerolba’s blog. Tech, JVM and random stuff.",
      "ogImage": null,
      "ogType": "website",
      "canonical": "https://www.jeronimo.dev/",
      "lang": "en-US",
      "schemas": [
        {
          "@context": "https://schema.org",
          "@type": "WebSite",
          "author": {
            "@type": "Person",
            "name": "Jerónimo López"
          },
          "description": "Jerolba’s blog. Tech, JVM and random stuff.",
          "headline": "Spartan Blog - Jerónimo",
          "name": "Spartan Blog - Jerónimo",
          "publisher": {
            "@type": "Organization",
            "logo": {
              "@type": "ImageObject",
              "url": "https://www.jeronimo.dev/images/spartan-helmet.png"
            },
            "name": "Jerónimo López"
          },
          "url": "https://www.jeronimo.dev/"
        }
      ],
      "robotsMeta": null,
      "author": "Jerónimo López",
      "generator": "Jekyll v3.8.7"
    }
  },
  "markdown": "Spring Batch is one of the few existing tools in the Java Enterprise ecosystem for building batch processes or data pipelines. However, its components (ItemReader/ItemWriter) are primarily oriented toward relational databases, CSV, XML, or JSON.\n\nIn a world where Data Lakes and columnar formats are increasingly important, integrating Parquet with Spring Batch opens new possibilities for building data pipelines from the Java world, without depending on complex solutions or different technology stacks that often cause friction in the Enterprise world.\n\nThis week I released a new version of [Carpet](https://github.com/jerolba/parquet-carpet), the Java library for working with Parquet files. In this version, I’ve added a feature that I believe nobody will ever use: **the ability to read and write BSON-type columns**.\n\nA few days ago, the creators of DuckDB wrote the article: [Query Engines: Gatekeepers of the Parquet File Format](https://duckdb.org/2025/01/22/parquet-encodings.html), which explained how the engines that process Parquet files as SQL tables are blocking the evolution of the format. This is because those engines are not fully supporting the latest specification, and without this support, the rest of the ecosystem has no incentive to adopt it.\n\nApache Parquet is a columnar storage format optimized for analytical workloads, though it can also be used to store any type of structured data solving multiple use cases.\n\nOne of its most notable features is the ability to efficiently compress data using different compression techniques at two stages of its process. This reduces storage costs and improves reading performance.\n\nThis article explains file compression in Parquet for Java, provides usage examples, and analyzes its performance.\n\nAfter some time working with Parquet files in Java using the Parquet Avro library, and studying how it worked, I concluded that despite **being very useful** in multiple use cases and having great potential, **the documentation and ecosystem needed for adoption in the Java world was very poor**.\n\nMany people are using suboptimal solutions (CSV or JSON files), applying more complex solutions (Spark), or using languages they are not familiar with (Python) because they don’t know how to work with Parquet files easily. That’s why I decided to **write this [series of articles](https://www.jeronimo.dev/working-with-parquet-files-in-java/)**.\n\nOnce you understand it and have the examples, everything is easier. But, **can it be even easier?** Can we avoid the hassle of using *strange* libraries that serialize other formats? **Yes, it should be even easier.**\n\nThat’s why I decided to **implement an Open Source library** that makes working with Parquet from Java extremely simple, something that covers it: **Carpet**.\n\nThis post continues the series of articles about working with Parquet files in Java. This time, I’ll explain how to do it using the Protocol Buffers (PB) library.\n\nFinding examples and documentation on how to use Parquet with Avro is challenging, but with **Protocol Buffers, it’s even more complicated**.\n\nIn the previous article, I wrote an introduction to using Parquet files in Java, but I did not include any examples. In this article, I will explain how to do this using the Avro library.\n\nParquet with Avro **is one of the most popular ways to work with Parquet files in Java** due to its simplicity, flexibility, and because it is the library with the most examples.\n\nParquet is a widely used format in the Data Engineering realm and holds significant potential for traditional Backend applications. This article serves as an **introduction to the format**, including some of the unique challenges I’ve faced while using it, to spare you from similar experiences.\n\nIn previous posts I’ve analyzed [Protocol Buffers](https://www.jeronimo.dev/java-serialization-with-protocol-buffers/) and [FlatBuffers](https://www.jeronimo.dev/java-serialization-with-flatbuffers/), using JSON as the baseline. In this post, I will analyze Apache Avro and compare it with the previously studied formats.\n\nIn the [previous post](https://www.jeronimo.dev/java-serialization-with-protocol-buffers/) I analyzed Protocol Buffers format, using JSON as baseline. In this post I’m going to analyze FlatBuffers and compare it with previously studied formats.\n",
  "fullPageMarkdown": "Spartan Blog - Jerónimo | Jerolba’s blog. Tech, JVM and random stuff.\n\n[![Spartan Blog - Jerónimo](https://www.jeronimo.dev/images/spartan-helmet.png)](https://www.jeronimo.dev/ \"Spartan Blog - Jerónimo\")# [Spartan Blog - Jerónimo](https://www.jeronimo.dev/)\n\nJerolba's blog. Tech, JVM and random stuff.\n\n### [Integrating Spring Batch with Parquet](https://www.jeronimo.dev/integrating-spring-batch-with-parquet/)\n\nSpring Batch is one of the few existing tools in the Java Enterprise ecosystem for building batch processes or data pipelines. However, its components (ItemReader/ItemWriter) are primarily oriented toward relational databases, CSV, XML, or JSON.\n\nIn a world where Data Lakes and columnar formats are increasingly important, integrating Parquet with Spring Batch opens new possibilities for building data pipelines from the Java world, without depending on complex solutions or different technology stacks that often cause friction in the Enterprise world.\n\n### [The Carpet feature that nobody will use](https://www.jeronimo.dev/the-carpet-feature-that-nobody-will-use/)\n\nThis week I released a new version of [Carpet](https://github.com/jerolba/parquet-carpet), the Java library for working with Parquet files. In this version, I’ve added a feature that I believe nobody will ever use: **the ability to read and write BSON-type columns**.\n\n### [The two versions of Parquet](https://www.jeronimo.dev/the-two-versions-of-parquet/)\n\nA few days ago, the creators of DuckDB wrote the article: [Query Engines: Gatekeepers of the Parquet File Format](https://duckdb.org/2025/01/22/parquet-encodings.html), which explained how the engines that process Parquet files as SQL tables are blocking the evolution of the format. This is because those engines are not fully supporting the latest specification, and without this support, the rest of the ecosystem has no incentive to adopt it.\n\n### [Compression algorithms in Parquet](https://www.jeronimo.dev/compression-algorithms-parquet/)\n\nApache Parquet is a columnar storage format optimized for analytical workloads, though it can also be used to store any type of structured data solving multiple use cases.\n\nOne of its most notable features is the ability to efficiently compress data using different compression techniques at two stages of its process. This reduces storage costs and improves reading performance.\n\nThis article explains file compression in Parquet for Java, provides usage examples, and analyzes its performance.\n\n### [Working with Parquet files in Java using Parquet Carpet](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-carpet/)\n\nAfter some time working with Parquet files in Java using the Parquet Avro library, and studying how it worked, I concluded that despite **being very useful** in multiple use cases and having great potential, **the documentation and ecosystem needed for adoption in the Java world was very poor**.\n\nMany people are using suboptimal solutions (CSV or JSON files), applying more complex solutions (Spark), or using languages they are not familiar with (Python) because they don’t know how to work with Parquet files easily. That’s why I decided to **write this [series of articles](https://www.jeronimo.dev/working-with-parquet-files-in-java/)**.\n\nOnce you understand it and have the examples, everything is easier. But, **can it be even easier?** Can we avoid the hassle of using *strange* libraries that serialize other formats? **Yes, it should be even easier.**\n\nThat’s why I decided to **implement an Open Source library** that makes working with Parquet from Java extremely simple, something that covers it: **Carpet**.\n\n### [Working with Parquet files in Java using Protocol Buffers](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-protocol-buffers/)\n\nThis post continues the series of articles about working with Parquet files in Java. This time, I’ll explain how to do it using the Protocol Buffers (PB) library.\n\nFinding examples and documentation on how to use Parquet with Avro is challenging, but with **Protocol Buffers, it’s even more complicated**.\n\n### [Working with Parquet files in Java using Avro](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-avro/)\n\nIn the previous article, I wrote an introduction to using Parquet files in Java, but I did not include any examples. In this article, I will explain how to do this using the Avro library.\n\nParquet with Avro **is one of the most popular ways to work with Parquet files in Java** due to its simplicity, flexibility, and because it is the library with the most examples.\n\n### [Working with Parquet files in Java](https://www.jeronimo.dev/working-with-parquet-files-in-java/)\n\nParquet is a widely used format in the Data Engineering realm and holds significant potential for traditional Backend applications. This article serves as an **introduction to the format**, including some of the unique challenges I’ve faced while using it, to spare you from similar experiences.\n\n### [Java Serialization with Apache Avro](https://www.jeronimo.dev/java-serialization-with-avro/)\n\nIn previous posts I’ve analyzed [Protocol Buffers](https://www.jeronimo.dev/java-serialization-with-protocol-buffers/) and [FlatBuffers](https://www.jeronimo.dev/java-serialization-with-flatbuffers/), using JSON as the baseline. In this post, I will analyze Apache Avro and compare it with the previously studied formats.\n\n### [Java Serialization with Flatbuffers](https://www.jeronimo.dev/java-serialization-with-flatbuffers/)\n\nIn the [previous post](https://www.jeronimo.dev/java-serialization-with-protocol-buffers/) I analyzed Protocol Buffers format, using JSON as baseline. In this post I’m going to analyze FlatBuffers and compare it with previously studied formats.\n",
  "markdownStats": {
    "images": 0,
    "links": 6,
    "tables": 0,
    "codeBlocks": 0,
    "headings": 0
  },
  "tokens": {
    "htmlTokens": 3880,
    "markdownTokens": 892,
    "reduction": 2988,
    "reductionPercent": 77
  },
  "score": {
    "score": 76,
    "grade": "B",
    "dimensions": {
      "semanticHtml": {
        "score": 91,
        "weight": 20,
        "grade": "A",
        "checks": {
          "uses_article_or_main": {
            "score": 100,
            "weight": 20,
            "details": "Has both <article> and <main>"
          },
          "proper_heading_hierarchy": {
            "score": 65,
            "weight": 25,
            "details": "2 <h1> elements (should be 1), 1 heading level skip(s)"
          },
          "semantic_elements": {
            "score": 100,
            "weight": 20,
            "details": "46 semantic elements, 15 divs (ratio: 75%)"
          },
          "meaningful_alt_texts": {
            "score": 100,
            "weight": 15,
            "details": "1/1 images with meaningful alt text"
          },
          "low_div_nesting": {
            "score": 100,
            "weight": 20,
            "details": "Avg div depth: 2.2, max: 3"
          }
        }
      },
      "contentEfficiency": {
        "score": 86,
        "weight": 25,
        "grade": "B",
        "checks": {
          "token_reduction_ratio": {
            "score": 80,
            "weight": 40,
            "details": "77% token reduction (HTML→Markdown)"
          },
          "content_to_noise_ratio": {
            "score": 80,
            "weight": 30,
            "details": "Content ratio: 29.2% (4359 content chars / 14947 HTML bytes)"
          },
          "minimal_inline_styles": {
            "score": 100,
            "weight": 15,
            "details": "0/175 elements with inline styles (0.0%)"
          },
          "reasonable_page_weight": {
            "score": 100,
            "weight": 15,
            "details": "HTML size: 15KB"
          }
        }
      },
      "aiDiscoverability": {
        "score": 50,
        "weight": 25,
        "grade": "D",
        "checks": {
          "has_llms_txt": {
            "score": 0,
            "weight": 25,
            "details": "No llms.txt found"
          },
          "has_robots_txt": {
            "score": 100,
            "weight": 15,
            "details": "robots.txt exists"
          },
          "robots_allows_ai_bots": {
            "score": 100,
            "weight": 20,
            "details": "All major AI bots allowed"
          },
          "has_sitemap": {
            "score": 100,
            "weight": 15,
            "details": "Sitemap found"
          },
          "supports_markdown_negotiation": {
            "score": 0,
            "weight": 15,
            "details": "No markdown content negotiation"
          },
          "has_content_signals": {
            "score": 0,
            "weight": 10,
            "details": "No Content-Signal header"
          }
        }
      },
      "structuredData": {
        "score": 67,
        "weight": 15,
        "grade": "C",
        "checks": {
          "has_schema_org": {
            "score": 50,
            "weight": 30,
            "details": "JSON-LD found but basic types: WebSite"
          },
          "has_open_graph": {
            "score": 67,
            "weight": 25,
            "details": "2/3 OG tags present"
          },
          "has_meta_description": {
            "score": 50,
            "weight": 20,
            "details": "Meta description too short: 43 chars"
          },
          "has_canonical_url": {
            "score": 100,
            "weight": 15,
            "details": "Canonical URL present"
          },
          "has_lang_attribute": {
            "score": 100,
            "weight": 10,
            "details": "lang=\"en-US\""
          }
        }
      },
      "accessibility": {
        "score": 93,
        "weight": 15,
        "grade": "A",
        "checks": {
          "content_without_js": {
            "score": 100,
            "weight": 40,
            "details": "Content available without JavaScript"
          },
          "reasonable_page_size": {
            "score": 100,
            "weight": 30,
            "details": "Page size: 15KB"
          },
          "fast_content_position": {
            "score": 75,
            "weight": 30,
            "details": "Main content starts at 22% of HTML"
          }
        }
      }
    }
  },
  "recommendations": [
    {
      "id": "add_llms_txt",
      "priority": "critical",
      "category": "aiDiscoverability",
      "titleKey": "rec.add_llms_txt.title",
      "descriptionKey": "rec.add_llms_txt.description",
      "howToKey": "rec.add_llms_txt.howto",
      "effort": "quick-win",
      "estimatedImpact": 10,
      "checkScore": 0,
      "checkDetails": "No llms.txt found"
    },
    {
      "id": "add_markdown_negotiation",
      "priority": "critical",
      "category": "aiDiscoverability",
      "titleKey": "rec.add_markdown_negotiation.title",
      "descriptionKey": "rec.add_markdown_negotiation.description",
      "howToKey": "rec.add_markdown_negotiation.howto",
      "effort": "significant",
      "estimatedImpact": 4,
      "checkScore": 0,
      "checkDetails": "No markdown content negotiation"
    },
    {
      "id": "add_content_signals",
      "priority": "critical",
      "category": "aiDiscoverability",
      "titleKey": "rec.add_content_signals.title",
      "descriptionKey": "rec.add_content_signals.description",
      "howToKey": "rec.add_content_signals.howto",
      "effort": "moderate",
      "estimatedImpact": 3,
      "checkScore": 0,
      "checkDetails": "No Content-Signal header"
    },
    {
      "id": "fix_heading_hierarchy",
      "priority": "medium",
      "category": "semanticHtml",
      "titleKey": "rec.fix_heading_hierarchy.title",
      "descriptionKey": "rec.fix_heading_hierarchy.description",
      "howToKey": "rec.fix_heading_hierarchy.howto",
      "effort": "quick-win",
      "estimatedImpact": 6,
      "checkScore": 65,
      "checkDetails": "2 <h1> elements (should be 1), 1 heading level skip(s)"
    },
    {
      "id": "add_open_graph",
      "priority": "medium",
      "category": "structuredData",
      "titleKey": "rec.add_open_graph.title",
      "descriptionKey": "rec.add_open_graph.description",
      "howToKey": "rec.add_open_graph.howto",
      "effort": "quick-win",
      "estimatedImpact": 4,
      "checkScore": 67,
      "checkDetails": "2/3 OG tags present"
    }
  ],
  "llmsTxtPreview": "# Spartan Blog - Jerónimo\n\n> Jerolba’s blog. Tech, JVM and random stuff.\n\n## Main\n- [Spartan Blog - Jerónimo](https://www.jeronimo.dev/): Jerolba’s blog. Tech, JVM and random stuff.\n- [Integrating Spring Batch with Parquet](https://www.jeronimo.dev/integrating-spring-batch-with-parquet/)\n- [The Carpet feature that nobody will use](https://www.jeronimo.dev/the-carpet-feature-that-nobody-will-use/)\n- [The two versions of Parquet](https://www.jeronimo.dev/the-two-versions-of-parquet/)\n- [Compression algorithms in Parquet](https://www.jeronimo.dev/compression-algorithms-parquet/)\n- [Working with Parquet files in Java using Parquet Carpet](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-carpet/)\n- [Working with Parquet files in Java using Protocol Buffers](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-protocol-buffers/)\n- [Working with Parquet files in Java using Avro](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-avro/)\n- [Working with Parquet files in Java](https://www.jeronimo.dev/working-with-parquet-files-in-java/)\n\n",
  "llmsTxtExisting": null,
  "snippets": [
    {
      "id": "add_llms_txt",
      "title": "Create /llms.txt",
      "description": "Upload this file to your web root. It tells AI agents what your site is about and which pages matter.",
      "language": "markdown",
      "code": "# Spartan Blog - Jerónimo\n\n> Jerolba’s blog. Tech, JVM and random stuff.\n\n## Main\n- [Spartan Blog - Jerónimo](https://www.jeronimo.dev/): Jerolba’s blog. Tech, JVM and random stuff.\n- [Integrating Spring Batch with Parquet](https://www.jeronimo.dev/integrating-spring-batch-with-parquet/)\n- [The Carpet feature that nobody will use](https://www.jeronimo.dev/the-carpet-feature-that-nobody-will-use/)\n- [The two versions of Parquet](https://www.jeronimo.dev/the-two-versions-of-parquet/)\n- [Compression algorithms in Parquet](https://www.jeronimo.dev/compression-algorithms-parquet/)\n- [Working with Parquet files in Java using Parquet Carpet](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-carpet/)\n- [Working with Parquet files in Java using Protocol Buffers](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-protocol-buffers/)\n- [Working with Parquet files in Java using Avro](https://www.jeronimo.dev/working-with-parquet-files-in-java-using-avro/)\n- [Working with Parquet files in Java](https://www.jeronimo.dev/working-with-parquet-files-in-java/)\n\n",
      "filename": "/llms.txt"
    },
    {
      "id": "fix_heading_hierarchy",
      "title": "Fix heading hierarchy",
      "description": "Your page has 2 <h1> elements. Keep only one. Demote the rest to <h2>.",
      "language": "html",
      "code": "<!-- Keep only one <h1> per page -->\n<h1>Spartan Blog - Jerónimo</h1>",
      "filename": "<main> or <article>"
    },
    {
      "id": "add_open_graph",
      "title": "Add missing Open Graph tags",
      "description": "These tags control how your page looks when shared on social media and some AI platforms.",
      "language": "html",
      "code": "<meta property=\"og:image\" content=\"https://yoursite.com/og-image.jpg\">\n<meta property=\"og:url\" content=\"https://www.jeronimo.dev/\">\n<meta property=\"og:type\" content=\"website\">",
      "filename": "<head>"
    },
    {
      "id": "add_content_signals",
      "title": "Add Content-Signal HTTP header",
      "description": "The Content-Signal header tells AI agents about the nature of your content. Add it via your web server or CDN.",
      "language": "nginx",
      "code": "# Nginx — add to your server block:\nadd_header Content-Signal \"type=website; lang=en-US\" always;\n\n# Apache — add to .htaccess:\n# Header set Content-Signal \"type=website; lang=en-US\"",
      "filename": "nginx.conf or .htaccess"
    },
    {
      "id": "add_markdown_negotiation",
      "title": "Support Accept: text/markdown",
      "description": "When a client sends Accept: text/markdown, respond with a Markdown version of the page. This is the gold standard for AI-readiness.",
      "language": "nginx",
      "code": "# Nginx — serve .md files when client requests Markdown:\n# Option 1: Serve pre-generated .md files\nmap $http_accept $markdown_suffix {\n  default \"\";\n  \"~text/markdown\" \".md\";\n}\n\n# Then in your location block:\ntry_files $uri$markdown_suffix $uri =404;\n\n# Option 2: Use your app framework to check the Accept header\n# and return Markdown content with Content-Type: text/markdown",
      "filename": "nginx.conf or application code"
    }
  ]
}

API를 사용하여 프로그래밍 방식으로 가져올 수 있습니다 (곧 출시)

이 JSON은 내부용입니다 — Markdown 및 llms.txt 파일과 달리 사이트에 업로드하기 위한 것이 아닙니다. 시간에 따른 점수 추적을 위한 기준값으로 저장하거나, 개발팀과 공유하거나, CI/CD 파이프라인에 통합하세요.

결과 공유

Twitter LinkedIn

배지 삽입

이 배지를 사이트에 추가하세요. AI 준비도 점수가 변경되면 자동으로 업데이트됩니다.

AgentReady.md score for www.jeronimo.dev
Script 권장
<script src="https://agentready.md/badge.js" data-id="e2a5c805-749c-45e5-953d-a16464f3ebcc" data-domain="www.jeronimo.dev"></script>
Markdown
[![AgentReady.md score for www.jeronimo.dev](https://agentready.md/badge/www.jeronimo.dev.svg)](https://agentready.md/ko/r/e2a5c805-749c-45e5-953d-a16464f3ebcc)

곧 출시: 전체 도메인 분석

전체 도메인을 크롤링하고, llms.txt를 생성하고, AI 준비도 점수를 시간에 따라 모니터링하세요. 대기자 명단에 등록하여 알림을 받으세요.

명단에 등록되었습니다! 서비스 출시 시 알려드리겠습니다.