MenuItem
Navigation menu item
type MenuItem {
id: ID!
image: Image
items: [MenuItem!]!
resource: MenuItemResource
resourceId: ID
title: String!
type: MenuItemType!
url: URL
}
Fields
MenuItem.id ● ID! non-null scalar
Item ID
MenuItem.image ● Image object
Custom banner image (with url(transform:) support)
MenuItem.items ● [MenuItem!]! non-null object
Child menu items (max 3 levels)
MenuItem.resource ● MenuItemResource union
Linked resource object resolved server-side via DataLoader (batched per resource type — no N+1). Null when type is HTTP/FRONTPAGE/SEARCH/CATALOG/BLOG, or when resourceId points to a deleted resource.
MenuItem.resourceId ● ID scalar
Linked resource ID
MenuItem.title ● String! non-null scalar
Display title
MenuItem.type ● MenuItemType! non-null enum
Link type
MenuItem.url ● URL scalar
Pre-resolved URL path computed server-side using a standard route convention: /categories/<handle>, /collections/<handle>, /pages/<handle>, /products/<handle>, /brands/<handle>. Static types resolve to /, /search, /products, /blog. HTTP returns the manually stored URL. Null when type is a resource link and the underlying resource was deleted. If your storefront uses non-standard routing (e.g. single-segment /<handle>), prefer reading the resource field instead and build URLs yourself from resource.__typename + handle.