Node ID
A sequential identifier assigned to each content node during extraction via depth-first traversal. These IDs appear in the structured Markdown output as {#ID} references, enabling the AI to target specific elements on the page for reading, citing, or interaction.
When Google Chrome extracts the content of a web page, it assigns a sequential identifier to every single node in the rendering tree. As the browser scans the page, it labels each element—one, two, three, and so on.
These numbers, called content node IDs, are then woven directly into the structured Markdown that the Gemini artificial intelligence model receives. For example, a heading might be tagged with ID two, a paragraph with ID four, and a link with ID five.
This simple labeling system is what makes page interaction possible. When Gemini needs to click a button, fill out a form, or follow a link, it simply references the node ID. Chrome then matches that ID back to the actual element on the live page. A built-in matching algorithm even verifies the element's type, position, and interactivity, which keeps things working smoothly even if the webpage changes dynamically.
Behind the scenes, Chrome actually manages two kinds of identifiers. While the content node ID is assigned to every node for Gemini to use, a second identifier—called the DOM node ID—is much more selective. To protect browser performance and keep memory usage low, Chrome only assigns this second ID to elements on a strict allowlist. This list always includes actionable targets like buttons and links, ensuring the browser stays fast while still giving the AI the precise coordinates it needs to navigate the web.
A sequential identifier assigned to each content node during Chrome's page extraction. As the Page Content Agent walks the rendering tree depth-first, every node receives a content_node_id: 1, 2, 3, and so on.
These IDs appear in the structured Markdown output that Gemini receives, tagged inline as {#ID} references. A heading might appear as # Welcome to Example {#2}, a paragraph as {#4} This is some text, a link as [Click here](https://example.com) {#5}. Every actionable element on the page gets one.
This is what makes page interaction possible. When Gemini needs to click a button, fill a form field, or follow a link, it references the node ID. Chrome matches that ID back to the actual DOM element on the page. A matching algorithm verifies the element by type, interactivity, and position, handling cases where the page has changed dynamically since extraction.
There are actually two kinds of ID. The content_node_id is assigned to every node and is what Gemini works with. The dom_node_id is more selective — assigned only to node types on an internal allowlist — because broad assignment grows Chrome's internal hash maps and hurts renderer performance. The allowlist always includes actionable targets (buttons, links) and metadata-linked nodes (focused elements, label references), with optional additional types configurable per request.
