* Add a customer quote component and apply it to three case studies
Customer quotes in case studies are written four different ways -
`> "quote" - Name, Title`, italic text with an italic attribution line,
quoted sentences buried mid-paragraph, or nothing at all. None of them
produce a visually distinct, attributed quote.
The root cause is that the six existing testimonial partials all read
`.Page.Params`, so they only work on landing pages driven by data files.
A case study written in markdown has no way to reach any of them, and
there was no quote shortcode, so authors fell back to raw markdown.
Add a `quote` shortcode with a matching stylesheet. Only `text` and
`name` carry the quote; `role`, `company`, `avatar`, `logo` and
`featured` are all optional and degrade gracefully.
Apply it to one case study per broken convention:
- bayer: attribution glued onto the end of the quoted sentence,
where the hyphen before the name collides with the one
inside the job title. Converts 3 of 12; the rest are a
mechanical repeat.
- tripadvisor: quote sat at line 57 of 64. Promoted to the lead quote
and trimmed to a contiguous excerpt, with an ellipsis
marking the omitted middle. Moved, not duplicated.
- sprinklr: quote buried mid-paragraph. No avatar exists for this
speaker, which exercises the graceful degradation.
The stylesheet nests its descendants so every rule carries two classes
of specificity. The article stylesheet targets bare `blockquote`, `p`
and `figcaption` under `.qdrant-post__content`, which otherwise wins
over a single-class selector and re-applies its own card and margins.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Convert Bayer's remaining nine quotes to the quote component
Finishes the conversion started in the previous commit: all twelve quotes
in the article now use the shortcode, and no bare blockquotes remain.
All twelve come from the same speaker with an identical attribution
suffix, so this was a mechanical pass. The repeated attribution is worth
a look in review - twelve cards each carrying the same face, name, role
and Bayer logo may be heavier than it needs to be when the speaker never
changes.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Slim the repeated attributions in the Bayer case study
Every quote in the article is from the same speaker, so twelve cards each
carrying the same face and Bayer logo was heavier than it needed to be.
The lead quote keeps the full treatment. The other eleven keep name and
role, which still identifies the speaker for a reader who lands partway
down the page, but drops the repeated avatar and logo.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Add the Sprinklr logo to the Sprinklr quote
Fills the empty right-hand side of the card. No headshot exists for this
speaker yet, so the avatar slot stays empty until one is supplied.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Restore both customer quotes to their published wording
The Tripadvisor quote had a sentence cut out of it and replaced with an
ellipsis, and the Sprinklr quote had its trailing comma changed to a
period once it stood on its own. Neither was ours to decide. Both now
match the published text exactly.
Audited all 14 quotes on this branch against master, comparing words and
punctuation. The twelve Bayer quotes were already verbatim.
Two changes to attribution remain, since they are formatting rather than
the speaker's words, but are worth a look in review:
- Bayer's title renders as "Senior Director AI/ML, Precision Medicine &
Insights" instead of the original hyphen, which was what collided with
the dash before his name.
- Tripadvisor's attribution used to link to Rahul Todkar's LinkedIn. The
component has no link support, so that link is now only in the body.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Drop the trailing comma from the Sprinklr quote
The comma joined the quotation to "explains Sonavane" in the original
sentence. Standing on its own in a block, it reads as an unfinished
sentence, so the quote ends in a period.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Restore the two attribution details lost in the conversion
Add a `name_url` param so a speaker's name can link to their profile, and
use it to restore the link to Rahul Todkar's LinkedIn that the original
Tripadvisor attribution carried.
Put back the hyphen inside Hooman Sedghamiz's job title. It was changed
to a comma because the original line ran two hyphens together - one
separating the quote from the speaker, one inside the title itself - and
they were indistinguishable. The component gives the speaker its own row,
so the first hyphen is gone and the one in the title reads clearly again.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Lift the remaining standalone Sprinklr quotes into the component
Four more were buried in prose: one closing a paragraph, one opening
another, one mid-paragraph, and one sitting as its own line. All are now
quote cards, and the logo moved to whichever card comes first on the page.
Words are verbatim. The only change is the trailing comma that joined each
quote to "says Sonavane", which belongs to our sentence rather than to the
speaker and goes with it.
Three quotes inside the "Why Qdrant?" bullet list are deliberately left
alone - lifting those would restructure the list, which is a layout call.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Put the "key challenge" quote back into the prose
It states the problem Sprinklr had, not anything about Qdrant, so on its
own in a card it reads as context-free. It did its job as the setup
sentence it was written to be. Restored exactly as published, original
comma included.
Sprinklr keeps the four quotes that stand on their own.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Reformat the benchmark code block in the Sprinklr case study
Every record was split across two lines with a blank line between them and
nothing was indented, so the block rendered as a wall of fragments. Each
record is now one indented line.
The fence was tagged json while the contents are Python - a `data = [...]`
assignment with single-quoted keys - so nothing was highlighted. Corrected
to python.
The records were parsed and re-emitted rather than retyped, and the values
were compared before and after, so the data is unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Stop repeating the company name next to its logo
A card showing the Bayer logo read "Senior Director AI/ML - Precision
Medicine & Insights, Bayer" right beside it. The logo already says which
company it is.
The name is hidden with CSS rather than dropped from the template, because
the logo is hidden below the md breakpoint and the company name has to
carry that job again on narrow screens.
Cards with no logo are unchanged and still name the company.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Give the two strongest Bayer quotes the visual weight
All twelve quotes stay as cards. The article was written with twelve pull
quotes and that structure is the author's, not ours to rewrite. What
changes is which ones carry the face and logo, and where two of them sit.
The omnimodal quote becomes the lead. It is the strongest thing in the
piece - a senior director at a 116,000 person company saying vector
databases outgrew RAG, and that "no one had" an omnimodal search engine
until this one. We could not make that claim ourselves.
The 20% efficiency quote gains the face and logo where it already sits. It
is the only quantified outcome spoken rather than reported, and a number
is worth more in the customer's voice than in ours.
The grounding quote that used to lead moves into the agents section, after
the paragraph introducing deep agents - "if you remove the search from the
agent" is what that section is about. It becomes a light card.
Also restores the blank line after seven cards that were glued to the
paragraph following them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Highlight the grounding quote instead of the 20% one
"20% efficiency" has no denominator - efficiency of what, measured how -
and it ends on "it wouldn't be possible without the components", which
does not say which components. It stays as a card, just not a highlighted
one.
The grounding quote takes the second face and logo. "If you remove the
search from the agent, the results go back to two years ago" is the most
concrete line in the piece, and it complements the lead rather than
repeating it: one says what Qdrant became, the other what breaks without
it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Set the lead quote at the same size as the others
The lead quote was 24px against 20px elsewhere, which made Tripadvisor's
long quote a wall of text. Position, the face and the logo already mark it
out. Drops the mobile override that only existed to scale the 24px back
down.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Apply the designer's type settings to the quote text
font-size 1.125rem, line-height 1.65rem, margin-bottom 1.5rem.
The margin needed the rule nested a level deeper to take effect. The
article stylesheet sets `blockquote p:last-child { margin-bottom: 0 }`,
which outranked the flat selector, so the spacing was being dropped.
Removes the narrow-screen override, which set the same 18px the designer
asked for and differed only in line-height.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Index
Running locally
Prerequisites
Required
Needed only for development
Updating npm dependencies via hugo
- 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
./run.sh
Open http://localhost:1313/ in your browser.
Run with drafts
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 -D
Build css from scss
For 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).
Content Management
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.
Main Page
Customers/Partners Logos
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.md
Edit 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
Metadata
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
---
Preview image mechanism
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
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 bash
For macOS, you'll have to install coreutils too.
brew install coreutils
Prepare preview image
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.
Generating preview images
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
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
Metadata
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).
---
Preview images for documentation pages
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.sh
It 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.
Documentation sidebar
Delimiter
To create a delimiter in the sidebar, use the following command:
cd qdrant-landing
hugo new --kind delimiter documentation/<delimiter-title>.md
It 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.
External link
To create an external link in the sidebar, use the following command:
cd qdrant-landing
hugo new --kind external-link documentation/<link-title>.md
It will create a file content/documentation/<link-title>.md. Open it and set the external_link parameter to the desired value.
Params
Additionally, to the standard Hugo front matter params, we have the following params:
hideInSidebar: true
If true, the page will not be shown in the sidebar. It can be used in regular documentation and section pages (_index.md).
Blog
To add a new blog post, run the following commands:
cd qdrant-landing
hugo new --kind blog-post blog/<post-title>.md
You'll see a file named content/blog/<post-title>.md. Open it and edit the front matter.
Images
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
Important notes
- 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
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.md
This 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/css/partials/_agenda.scss.
Demo
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.
Add a demo
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.
Add a filter
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).
Shortcodes 🧩🧩🧩
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" >}}
Built-in shortcodes
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.
Custom shortcodes
You can find the list of available shortcodes in the qdrant-landing/themes/qdrant/layouts/shortcodes directory.
🧩 Card
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.
🧩 Grid Row
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.
🧩 Banner
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"
🧩 Congratulations-banner
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
- 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
- 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
🧩 Date
Example:
{{< date >}} Day 1 {{< /date >}}
Parameters for date shortcode:
image- optional, default "/icons/outline/date-blue.svg"
🧩 Cards list
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 >}}
🧩 Accordion
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 >}}
🧩 Code Snippets Widget
This shortcode renders a code snippets widget from a specified path. Use it when you want to manage code examples as a collection of separate Markdown files. The following parapghs refer to hand-written snippets. It's recommended to write code snippets as testable code instead. Refer to automation/snippets/README.md for details.
📁 Directory Structure
Place all code snippets for a single widget into one directory. Each file should be named after the programming language it represents:
points-id/
├── http.md
├── python.md
├── go.md
File names are used for sorting. It's recommended to name files according to the language they contain (e.g., python.md, go.md). Sorting is controlled by the order parameter or the snippetsOrder parameter (see below).
Each file should contain a code snippet in a fenced code block (```).
▶️ Example Usage
{{< code-snippet path="/documentation/headless/snippets/points-id/" order="python http go" >}}
⚙️ Parameters
path(required) – Path to the directory (inside content/) containing the snippet files.order(optional) – Space-separated list of snippet names to display first. Remaining files will be rendered in the order they appear in the directory. Sorting is based on file names (without .md).
You can also define a global default snippet order using the snippetsOrder parameter in the relevant section’s _index.md.
⚠️ Notes
Important: Turn off rendering for the snippets directory if it's not already disabled in its parent section. Otherwise, Hugo will attempt to generate standalone pages for these files.
You can include multiple snippets in a single Markdown file, but in that case, the order parameter has no effect—they will render in the order they appear in the file.
🚫 Limitations
Snippet files must not contain front matter (---). Each code snippet should be a fenced code block (```).
The snippetsOrder parameter only works at the section level or deeper. If you're adding snippets to a section for the first time, make sure to define snippetsOrder in that section’s or a child section’s _index.md.
SEO
Structured data (Schema.org, JSON-LD)
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/layouts/partials/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.json
If 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.











