- Running locally
- Content Management
- Go to
qdrant-landing/themes/qdrant-2024/package.hugo.jsonand configure desired versions of npm packages. - Run
hugo mod npm packto update theqdrant-landing/themes/qdrant-2024/package.jsonfile fromqdrant-landing/themes/qdrant-2024directory. - Go to
qdrant-landingand runhugo mod npm packagain to update globalpackage.jsonfile. - Run
npm installto install the updated dependencies.
./run.shOpen http://localhost:1313/ in your browser.
If your changes are not shown on the site, check if your markdown file has draft: true in the header.
Drafts are not shown by default. To see drafts, run the following command:
cd qdrant-landing
hugo serve -DFor the previous theme, it was required to build CSS files. We don't need to build CSS from SCSS anymore explicitly. It's done automatically by Hugo using Dart Sass, which should be installed on your machine to see results).
To add new content to the site, you need to add a markdown file to the corresponding directory. The file should have a header with metadata. See examples below.
Do not push changes to the master branch directly. Create a new branch and make a pull request.
If you want to make your changes live, you need to merge your pull request to the master branch. After that, the changes will be automatically deployed to the site.
To add a customer logo to the marquee on the main page:
-
Add a logo to
/qdrant-landing/static/content/images/logosdirectory. The logo should be in PNG format and have a transparent background and a width of 200px. The color of the logo should be#B6C0E4. -
Add a markdown file to
content/stackdirectory using the next command (replacecustomer-namewith the name of the customer):
cd qdrant-landing
hugo new --kind customer-logo stack/customer-name.mdEdit the file if needed.
- If the total number of slides changed - update
static/css/main.scssfile. Find line:
@include marquee.base(80px, 200px, 13, 6, 20px, false, 50s);and change 13 to the number of logos.
Rebuild CSS from SCSS (see instructions above).
- To change order of the logos - add or change
weightparameter in the markdown files in/qdrant-landing/content/stackdirectory.
Articles are written in markdown and stored in content/articles directory. Each article has a header with metadata:
---
title: Here goes the title of the article #required
short_description: Short description of the article
description: This is a longer description of the article, you can get a little bit more wordly here. Try to keep it under 140 characters. #required
social_preview_image: /articles_data/cars-recognition/social_preview.jpg # This image will be used in social media previews, should be 1200x630px. Required.
small_preview_image: /articles_data/cars-recognition/icon.svg # This image will be used in the list of articles at the footer, should be 40x40px
preview_dir: /articles_data/cars-recognition/preview # This directory contains images that will be used in the article preview. They can be generated from one image. Read more below. Required.
weight: 10 # This is the order of the article in the list of articles at the footer. The lower the number, the higher the article will be in the list.
author: Yusuf SarΔ±gΓΆz # Author of the article. Required.
author_link: https://medium.com/@yusufsarigoz # Link to the author's page. Required.
date: 2022-06-28T13:00:00+03:00 # Date of the article. Required.
draft: false # If true, the article will not be published
keywords: # Keywords for SEO
- vector databases comparative benchmark
- benchmark
- performance
- latency
---Keep the article, its original URL, aliases, publication date, and assets. Add the following front matter to archive it while keeping HTML and Markdown available:
retired: true
hideFromList: true
sitemapExclude: true
build:
list: never
render: always
# Optional resource for readers; this does not redirect the archived page.
retired_resource:
title: Full-Text Search Documentation
url: /documentation/search/text-search/full-text-search/retired adds the same archive notice to HTML and Markdown. Use retired_note
for necessary historical context. hideFromList excludes article cards, and
build.list: never excludes automatic collections, including RSS feeds.
sitemapExclude adds HTML noindex and excludes the page from the sitemap and
llms.txt.
Add X-Robots-Tag: noindex rules in qdrant-landing/assets/netlify/_headers for
/articles/<slug>/* and /articles/<slug>.md. The wildcard covers HTML and
index.md; the separate rule covers the /path.md copy Hugo also publishes.
Hugo writes that file into public/_headers, so do not add one to static/.
Preserve existing alias routes and cover their HTML paths too. Do not block
crawling in robots.txt: crawlers need to fetch the indexing directive.
Replace active recommendations with maintained content; historical references
can continue linking to the archive.
Preview image for each page is selected based on the following places in the following order:
- If the document has param
social_preview_image- it will be used as the preview image - If there is a file
static/<path-to-section>/<file-name>-social-preview.png- it will be used as the preview image - Global
preview_image = "/images/social_preview.png"will be used as the preview image
Article preview is a set of images that will be used in the article preview. They can be generated from one image. To generate preview images, you need to have ImageMagick and cwebp installed.
You can install cwebp with the following command:
curl -s https://raw.githubusercontent.com/Intervox/node-webp/latest/bin/install_webp | sudo bashFor macOS, you'll have to install coreutils too.
brew install coreutils
For the preview use an image with an aspect ratio of 3 to 1 in JPG or PNG format. With a resolution not smaller than 1200x630px. The image should illustrate in some way the article's core idea. Fill free got creative. Check out that the most important part of the image is in the center.
To generate preview images, run the following command from the root of the project:
bash -x automation/process-article-img.sh <path-to-image> <alias-for-the-article>For example:
bash -x automation/process-article-img.sh ~/Pictures/my_preview.jpg filterable-hnsw This command will create a directory preview in static/article_data/filterable-hnsw and generate preview images in it. If the directory static/article_data/filterable-hnsw doesn't exist, it will be created. If it exists, only files in the children preview directory will be affected. In this case, preview images will be overwritten. Your original image will not be affected.
For macOS you'll have to make 2 adjustements to process-img.sh script which is run by process-article-img.sh script:
- Exchange
stat -c %Ywithstat -f %m; - Exchange
realpathwithgrealpath.
Preview images set consists of the following images:
preview.jpg - 530x145px (used on the article preview card for browsers, not supporting webp)
preview.webp - 530x145px (used on the article preview card for browsers, supporting webp)
title.jpg - 898x300px (used on the article's page as the main image before the article title for browsers, not supporting webp)
title.webp - 898x300px (used on the article's page as the main image before the article title for browsers, supporting webp)
social_preview.jpg - 1200x630px (used in social media previews)
Documentation pages are written in markdown and stored in content/documentation directory. Each page has a header with metadata:
---
title: Here goes the title of the page #required
weight: 10 # This is the order of the page in the sidebar. The lower the number, the higher the page will be in the sidebar.
canonicalUrl: https://qdrant.io/documentation/ # Optional. This is the canonical URL of the page.
hideInSidebar: true # Optional. If true, the page will not be shown in the sidebar. It can be used in regular documentation pages and in documentation section pages (_index.md).
---Branded individual preview images for documentation pages might be auto-generated using the following command:
(from the root of the project)
bash -x automation/generate-all-docs-preview.shIt will automatically insert the documentation Section name and Title of the page into the preview.
If there is a custom background for the image - it should be placed in the static/documentation/<section-name>/<page>-bg.png.
If there is no custom background - a random default background will be used.
Generated images will be placed in the static/documentation/<section-name>/<page>-social-preview.png.
To re-generate the preview image, remove the previously generated one and re-run the command.
To create a delimiter in the sidebar, use the following command:
cd qdrant-landing
hugo new --kind delimiter documentation/<delimiter-title>.mdIt will create a file content/documentation/<delimiter-title>.md.
To put a delimiter to the desired place in the sidebar, set the weight parameter to the desired value. The lower the value, the higher the delimiter will be in the sidebar.
To create an external link in the sidebar, use the following command:
cd qdrant-landing
hugo new --kind external-link documentation/<link-title>.mdIt will create a file content/documentation/<link-title>.md. Open it and set the external_link parameter to the desired value.
Additionally, to the standard Hugo front matter params, we have the following params:
hideInSidebar: trueIf true, the page will not be shown in the sidebar. It can be used in regular documentation and section pages (_index.md).
The Learn portal (/learn/) groups four resources: Guides, Tutorials & Examples, Courses, and Technical Articles, with a link to videos on YouTube. The sidebar for partition: learn pages is built by themes/qdrant-2024/layouts/partials/documentation/learn-menu.html from the content below.
Search on partition: learn pages covers Articles, Courses, guide sections, and pages marked learning_kind: examples. The learn-search-sections meta tag supplies those paths because tutorials retain their Develop or Ecosystem partitions. Develop and Deploy continue to share the develop,deploy,cloud,qdrant documentation search scope.
The Guides and Tutorials & Examples hubs show the three most recently published dated pages in their collections. Set date (or publishDate) in a page's front matter to include it; undated pages remain in the full listings. Content moves do not reset publication dates. The initial three tutorial dates come from their original addition commits.
To add a guide, copy an existing guide into a new Markdown file in the appropriate topic directory. Use a descriptive, hyphenated filename, such as my-guide.md, and set draft: true while writing. Remove copied aliases and any metadata specific to the original guide, such as guide_series for a standalone guide.
Choose the directory that matches the guide:
| Topic | Directory under content/documentation/ |
|---|---|
| Search Design | search-design/ |
| Search Evaluation | search-evaluation/ |
| Search Tuning | search-tuning/ |
| Deploy and Scale | deploy-and-scale/ |
| Operate and Maintain | operate-and-maintain/ |
- Fill in the title,
short_description(card summary),description(search/social summary), and Markdown body. Keep the guide directly inside its topic directory. - Set
dateto the publication date, remove or update any copiedpublishDate, and choose a unique positiveweightwithin the topic. Lower weights appear first; gaps such as 10, 20, 30 make later insertions easier. - Preview with the existing Hugo development server. Drafts require the server's
--buildDrafts/-Doption. Setdraft: falsewhen the guide is ready for publication, then submit the normal content PR.
The topic's _index.md cascades partition: learn and learning_kind: guides to its pages; do not repeat these fields in individual guides. No menu, catalog, or template edits are needed for a new guide in an existing topic:
- Browse Guides by Topic, the topic landing page, and the Learn sidebar list the topic's published pages by
weight.hideInSidebar: trueonly hides the sidebar entry. - Recently Published shows the three newest dated guides across all topics, sorted by Hugo's
PublishDate: explicitpublishDatetakes precedence overdate. Editing a guide or changing its weight does not make it recent. Undated guides remain in the full listings. Drafts and future publications are excluded from normal builds unless the corresponding Hugo build flags are enabled. - Markdown directories are generated from the same topic pages.
- Start with a Practical Guide is curated in
content/documentation/guides-tab.md. Each card references a guide bypage; its title and URL come from that page, while its summary, icon, and button text remain customizable. Topic banner buttons are also curated.
Set guide_series: true only on pages that form an ordered series. The section's guide_series_title names the series, and weight sets the order of the numbered cards and the previous/next links. Standalone guides do not need this flag.
To add a new topic, copy an existing topic's _index.md into a new directory under content/documentation/. Update its title, descriptions, weight, icon, banner links, and guide-cards section path. Retain partition: learn, learning_kind: guides, their cascade defaults, and layout: guides. The overview and sidebar discover the new topic automatically; layout: guides also generates its Markdown directory.
When moving an existing page into a guide topic, preserve its original date, add its former URL to aliases, add a wildcard redirect in static/_redirects (/old-path/* /new-path/:splat 301!), and update internal links. The wildcard covers HTML and Markdown, and 301! takes precedence over Hugo's generated alias files. Put specific page redirects before broader section redirects.
/learn/examples/ automatically lists published pages marked learning_kind: examples, ordered by title. The existing tutorials-* sections and documentation/examples/ supply that marker through their _index.md cascade. Pages retain their original URLs and Develop or Ecosystem navigation.
To add a tutorial:
- Create a Markdown page in the appropriate tutorial section, or copy an existing tutorial and remove its old aliases and publication dates. Use
draft: truewhile writing. - Fill in
title,short_description(ordescription),goal, andstack. Reuse an existing goal where appropriate. Add optionalkeywordsfor collection search andexample_resourcesfor direct code or notebook links. - Set
date(orpublishDate) to the publication date and preview with the existing Hugo server (--buildDrafts/-Dincludes drafts). Setdraft: falsewhen ready and submit the normal content PR.
goal: Search Quality
stack:
- Python
- FastEmbed
# Optional; each URL must also appear in the tutorial body.
example_resources:
- label: Open Notebook
url: https://github.com/qdrant/examples/blob/master/code-search/code-search.ipynbNo separate catalog entry is needed. The listing, Goal and Stack filters, Learn sidebar categories, Learn search scope, and Markdown directory all use the same discovered pages. Recently Published selects the three newest dated tutorials by PublishDate; editing a tutorial does not change its publication date. Normal builds exclude drafts and future publications.
A tutorial outside these sections can opt in by setting learning_kind: examples in its front matter. A non-tutorial inside them can opt out with learning_kind: reference. Keep hideInSidebar for controlling the documentation sidebar; it does not exclude a tutorial from Learn.
The build reports missing goals, stacks, or descriptions, and resource URLs that no longer appear in the tutorial body. example_resources is separate from Hugo's reserved resources field for page bundle configuration.
The sidebar lists each section of content/course/ by weight. To add an external course, create a page in content/learn/ with type: external-link, external_url, weight, partition: learn, and sitemapExclude: true. The ref-courses-*.md files are examples.
An article is listed under the category page in content/articles/<category>/_index.md that matches its category. The shared article-selection helper lives in themes/qdrant-2024/layouts/partials/documentation/articles/list.html, so HTML and Markdown use the same collection. The five topics are Vector Search Fundamentals (vector-search-fundamentals), Embeddings & Machine Learning (embedding-research), Relevance & Evaluation (relevance-and-evaluation), Indexing & Storage (qdrant-internals), and RAG & Agents (rag-and-agents). Reassign articles before removing a category index, or the articles disappear from both listings.
To add a new blog post, run the following commands:
cd qdrant-landing
hugo new --kind blog-post blog/<post-title>.mdYou'll see a file named content/blog/<post-title>.md. Open it and edit the front matter.
Author cards appear after a blog post's content. Each post must opt in with an author_profile key.
- Save an optimized portrait in
qdrant-landing/static/authors/, using the author's profile key as the filename. Resize and compress the photo before adding it. - Add a profile to
qdrant-landing/data/authors.yaml. Choose a unique lowercase key with hyphens, such asdylan-couzon. Replace the example values:
your-profile-key:
name: Your Name
role: Your Role at Qdrant
bio: Write one or two sentences in your own voice.
image: /authors/your-profile-key.jpg
linkedin: https://www.linkedin.com/in/your-handle/
# x: https://x.com/your-handleThe name, bio, and image fields are required. Keep bios within 300 characters, including spaces and punctuation. Longer bios fail the build. The role, linkedin, and x fields are optional. Include only the social links the author uses.
- Add the profile key to the blog post's front matter. For Dylan's card, use:
author: Dylan Couzon
author_profile: dylan-couzonKeep the existing author byline, including any coauthors. The author_profile key selects one person's card. Reuse that key across posts to update the bio in one place. Unknown keys fail the build. Posts without author_profile keep their existing layout. The Markdown output includes the bio and social links.
Store images for blog posts in the following subdirectory: static/blog/<post-title>. You can add nested directories if needed. For social media previews, use images of at least 1200x600px.
In the blog post file, you'll see:
-
preview_image: The image that appears with the blog post. If you want different images for social media, the blog post title, or the preview, use the following properties:social_preview_imagetitle_preview_imagesmall_preview_image
- Add tags. While they're not shown on the blog post page, they are used to display related posts.
- If a post has
featured: trueproperty in the front matter this post will appear in the "Features and News" blog section. Only the last 4 featured posts will be displayed in this section. Featured posts will not appear in the regular post list.- If there are more than 4
featured: trueposts (wheredraft: false), the oldest post disappears from /blog.
- If there are more than 4
Agenda pages display event schedules with talk slots, speaker info, and break cards. Each agenda is a single markdown file containing all slots in the front matter β no separate files per talk.
To create a new agenda page:
cd qdrant-landing
hugo new --kind agenda agenda/my-event.mdThis generates content/agenda/my-event.md with a starter template. Open it and fill in the front matter:
headingβ page title displayed on the pagelogoβ path to the event logo shown next to the headinghero_imageβ hero background image at the topbadge_icons_pathβ directory path for badge SVG icons (used by thesvgpartial)descriptionβ SEO meta descriptionsubtitleβ visible text below the headingdate_info,locationβ event date and venue
Each item in the slots list is either a talk or a break:
slots:
# Talk slot
- type: talk
title: "Talk Title"
description: "Talk description text."
company_logo: /img/path-to/logo.svg
badge: "BADGE NAME"
badge_type: qdrant # qdrant | search | agents | edge
badge_icon: presentation # matches SVG filename in badge_icons_path
speaker_name: "Speaker Name"
speaker_role: "Role, Company"
speaker_avatar: /img/path-to/avatar.png
duration: "20'"
time: "10:00 AM"
# Break slot
- type: break
title: "Coffee Break"
duration: "15'"
time: "10:30 AM"Optional talk parameters:
company_logo_offsetβ adjust logo position withplacement(top/bottom/left/right) andvalue(px)
The layout lives at themes/qdrant-2024/layouts/agenda/single.html and styles at themes/qdrant-2024/assets/marketing/css/partials/_agenda.scss.
Demos and filters for the /demo page live in qdrant-landing/content/demo/items/_index.md. Edit that file only β no template changes needed for new demos or filters.
Append an entry under demos::
demos:
- id: my-new-demo # unique slug
title: My New Demo
description: Short description shown on the card.
category: Semantic Search # must match a filter field (see below)
image: /img/demos/demo-0.png # optional; omit for a placeholder
github: https://github.com/org/repo # optional; icon link on the card
weight: 10 # optional; same rules as Hugo page weight
link:
text: View Demo
url: https://example.com/weight follows Hugoβs built-in page weight rules: use a non-zero integer; lighter items float to the top, heavier sink to the bottom; missing or 0 weight is placed at the end. Ties break by title.
Put card images in themes/qdrant-2024/static/img/demos/. Provide a PNG and a matching WebP at 800Γ296px (same basename, e.g. demo-0.png + demo-0.webp). Only list the PNG file in the markdown; the picture partial swaps the extension to serve WebP when available.
Each filter needs a key that matches a field on every demo, and a label for the sidebar. Filter options are collected automatically from demo values unless you set values explicitly.
filters:
- key: category
label: Categories
- key: industry # new filter
label: Industries
demos:
- id: my-new-demo
title: My New Demo
description: Short description shown on the card.
category: Semantic Search
industry: Healthcare # same key as the new filter
link:
text: View Demo
url: https://example.com/Optional: batchSize controls how many cards show before βView Moreβ (default 8).
Hugo lets you use built-in and custom shortcodes to simplify the creation of content. Meanwhile, keep in mind that shortcodes make the content less portable. If you decide to move the content to another platform, you'll need to rewrite the shortcodes. Avoid to overuse them.
You can use shortcodes in markdown files by enclosing the shortcode in double curly braces. For example:
{{< shortcode-name param1="value1" param2="value2" >}}List of built-in shortcodes can be found in the Hugo documentation.
If you use a shortcode in your markdown file, but it fails to render, check if the shortcode is available with the Hugo version the site is built with.
You can find the list of available shortcodes in the qdrant-landing/themes/qdrant/layouts/shortcodes directory.
Example:
{{< card
title="Qdrant Quickstart"
link="/documentation"
type="Info" // optional
icon="/icons/outline/documentation-blue.svg"
col="6" >}}
This guide will help you get started with Qdrant locally.
{{< /card >}}
Example:
{{< card
title="Qdrant Quickstart"
link="/documentation"
image="/img/brand-resources-hero.svg"
col="6" >}}
This guide will help you get started with Qdrant locally.
{{< /card >}}
Parameters for card shortcode:
title- requiredlink-requiredimage- optional, default nulltype- optional, default "Document"icon- optional, default is an icon of documentscol- optional, default 12
Card variant 1 is the default; you can optionally change the icon and type, if you use image option, you will get variant 2, type and icon will be ignored even if given.
Cards should be enclosed in a row shortcode if you want to have more than one card in a row.
Example:
{{< grid-row >}}
{{< card
title="Title one"
link="/some-link"
image="some-image.svg"
col="6" >}}
This is a first card.
{{< /card >}}
{{< card
title="Title two"
link="/another-link"
image="another-image.svg"
col="6" >}}
This is a second card.
{{< /card >}}
{{< /grid-row >}}
Each card will take up half of the row in the example above.
Example:
{{< banner link="/documentation" >}}
This guide will help you get started with Qdrant locally.
{{< /banner >}}
Parameters for banner shortcode:
link- requiredcta- optional, default "Get Started"image- optional, default "/img/rocket.svg"
Example:
{{< congratulations-banner
title="Congratulations!"
description="Youβve reached the end of Day 0!" >}}
Parameters for congratulations-banner shortcode:
title- requireddescription- requiredimage- optional, default "/img/congratulations.svg"
- List - variant 1
Example:
{{< list isCompleted="false" >}}
- Set up your Qdrant Cloud account
- Created your first Qdrant collection
- Inserted vectors with metadata
- Performed a similarity search
{{< /list >}}
- List - variant 2
Example:
{{< list isCompleted="true" >}}
- Set up your Qdrant Cloud account
- Created your first Qdrant collection
- Inserted vectors with metadata
- Performed a similarity search
{{< /list >}}
Parameters for list shortcode:
isCompleted- optional, default "false"
- Course-card - variant 1
Example:
{{< course-card
title="Skills youβll gain:"
image="/icons/outline/training-white.svg"
isWideList="true">}}
- Vector search fundamentals
- Performance optimization
- Hybrid and similarity search
- Portfolio project development
{{< /course-card >}}
- Course-card - variant 2
Example:
{{< course-card
title="Why Start Today"
image="/icons/outline/rocket-white-light.svg"
link="/course/day-0/">}}
- Seeing practical examples (e.g., hybrid search, sparse+dense vectors)
- Learning key deployment tactics (multi-node clusters, on-disk indexing, RBAC)
- Building a final portfolio-grade project to showcase
{{< /course-card >}}
Parameters for course card shortcode:
title- requiredisWideList- optional, default "false"image- optional, default "/icons/outline/training-white.svg"link- optional, default null
Example:
{{< date >}} Day 1 {{< /date >}}
Parameters for date shortcode:
image- optional, default "/icons/outline/date-blue.svg"
Example:
{{< cards-list >}}
- icon: /courses/course-integrations/quotient.svg
title: Quotient
content: Qdrant is compatible with Cohere co.embed API.
- icon: /courses/course-integrations/superlinked.svg
title: Superlinked
content: Qdrant is compatible with Cohere co.embed API.
- icon: /courses/course-integrations/twelveLabs.svg
title: TwelveLabs
content: Qdrant is compatible with Cohere co.embed API.
- icon: /courses/course-integrations/aparavi.svg
title: APARAVI
content: Qdrant is compatible with Cohere co.embed API.
{{< /cards-list >}}
Example:
{{< accordion >}}
- title: "Days 0: Setup, Orientation & βHello Qdrant!β"
content: |
- Welcome & Course Orientation
- Environment Setup
- Mini βHello Qdrant!β Demo
- title: "Day 1: Core Qdrant Data Model & Vector Search 101"
content: Content
- title: "Days 2: Indexing & Vector Storage Architecture"
content: Content
{{< /accordion >}}
This shortcode renders a code snippet as a set of language tabs, read from a snippet directory under qdrant-landing/content/documentation/headless/snippets/.
Write snippets as compilable source files (python.py, rust.rs, and so on) rather than hand-written Markdown. CI type-checks them against the Qdrant clients, and automation/snippets/generate-md.py generates the Markdown that the shortcode reads. Only HTTP and JSON snippets (http.md, json.md) are hand-written. For writing, testing, and generating snippets, see automation/snippets/README.md.
A snippet directory holds one file per language, plus the generated Markdown:
create-collection/simple/
βββ _description.md
βββ generated/
β βββ python.md
β βββ ...
βββ http.md
βββ python.py
βββ ...
A snippet with deployment variants has one subdirectory per deployment type instead. Each subdirectory has the same structure as a regular snippet directory, and _description.md stays at the top level:
query-points/hybrid-rrf/
βββ _description.md
βββ _server/
β βββ generated/
β βββ http.md
β βββ python.py
β βββ ...
βββ _edge/
βββ generated/
βββ python.py
βββ rust.rs
The shortcode reads the .md files in the snippet directory (or in each variant directory) and in its generated/ subdirectory. It ignores files whose names start with _. Hugo doesn't render the headless/ section as pages. Hand-written snippet files contain a single fenced code block and no front matter.
{{< code-snippet path="/documentation/headless/snippets/create-collection/simple/" >}}
path(required): path to the snippet directory, relative tocontent/.order(optional): space-separated list of languages to show first, for exampleorder="python http go". Without it, the shortcode uses thesnippetsOrderlist from the nearest section_index.md, which for all snippets isheadless/snippets/_index.md. Languages not in the list follow in alphabetical order.block(optional): name of a block defined with@block-startand@block-endin the source files. The shortcode then shows only that block.
A snippet can have a separate variant per deployment type, in the _server/, _edge/, and _serverless/ subdirectories of the snippet directory. When a snippet has two or more variants, the widget shows a "Deployment type" switcher, with Qdrant Server as the default. Once any variant directory exists, the shortcode ignores the files at the top level of the snippet directory. See Deployment variants for details.
In the Markdown version of a page (index.md), the shortcode shows only the first language, and the first variant if there are several. It links to a standalone page with all languages under /documentation/snippets/.
Structured data is a standardized format for providing information about a page and classifying the page content. It is used by search engines to understand the content of the page and to display rich snippets in search results.
We use JSON-LD format for structured data. Data is stored in JSON files in the /assets/schema directory. If no specific schema is provided for a page, the default schema is used based on the page type as defined in the qdrant-landing/themes/qdrant-2024/layouts/partials/common/seo_schema.html file.
To add schema to a specific page, use the seo_schema or seo_schema_json parameter in the front matter of content markdown files (directory content).
To add JSON directly to the page, use the seo_schema parameter. The value should be a JSON object.
Example:
seo_schema: {
"@context": "https://schema.org",
"@type": "Organization",
"name": "Qdrant",
"url": "https://qdrant.io",
"logo": "https://qdrant.io/images/logo.png",
"sameAs": [
"https://www.linkedin.com/company/qdrant",
"https://twitter.com/qdrant"
]
}To add a path to a JSON file with schema data, use the seo_schema_json parameter. This parameter should contain a list of paths to JSON files.
The path should be relative to the qdrant-landing/assets directory.
Example:
seo_schema_json:
- schema/schema-organization.json
- schema/product-schema.jsonIf you want to add a new schema, create a new JSON file in the qdrant-landing/assets/schema directory and add the path to the seo_schema_json parameter.
When use seo_schema and seo_schema_json together, seo_schema will be used additionally to seo_schema_json adding the second <script> tag with the seo_schema value.
Use seo_schema_json if you want to reuse the same schema for multiple pages to avoid duplication and make it easier to maintain.











