/doc/development/documentation/site_architecture/global_nav.md
Markdown | 304 lines | 225 code | 79 blank | 0 comment | 0 complexity | 70c2d374f99f73a1e77c22d5047e4bb3 MD5 | raw file
- ---
- stage: none
- group: unassigned
- info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
- description: "Learn how GitLab docs' global navigation works and how to add new items."
- ---
- # Global navigation
- > - [Introduced](https://gitlab.com/gitlab-org/gitlab-docs/-/merge_requests/362) in GitLab 11.6.
- > - [Updated](https://gitlab.com/gitlab-org/gitlab-docs/-/merge_requests/482) in GitLab 12.1.
- > - [Per-project](https://gitlab.com/gitlab-org/gitlab-docs/-/merge_requests/498) navigation added in GitLab 12.2.
- > - [Unified global navigation](https://gitlab.com/gitlab-org/gitlab-docs/-/merge_requests/1482) added in GitLab 13.11.
- Global navigation is the left-most pane in the documentation. You can use the
- "global nav" to browse the content.
- Research shows that people use Google to search for GitLab product documentation. When they land on a result,
- we want them to find topics nearby that are related to the content they're reading. The global nav provides this information.
- At the highest level, our global nav is workflow-based. Navigation needs to help users build a mental model of how to use GitLab.
- The levels under each of the higher workflow-based topics are the names of features.
- For example:
- **Use GitLab** (_workflow_) **> Build your application** (_workflow_) **> CI/CD** (_feature_) **> Pipelines** (_feature)
- ## Choose the right words for your navigation entry
- Before you add an item to the left nav, choose the parts of speech you want to use.
- The nav entry should match the page title. However, if the title is too long,
- when you shorten the phrase, use either:
- - A noun, like **Merge requests**.
- - An active verb, like **Install GitLab** or **Get started with runners**.
- Use a phrase that clearly indicates what the page is for. For example, **Get started** is not
- as helpful as **Get started with runners**.
- ## Add a navigation entry
- All topics should be included in the left nav.
- To add a topic to the global nav, edit
- [`navigation.yaml`](https://gitlab.com/gitlab-org/gitlab-docs/blob/main/content/_data/navigation.yaml)
- and add your item.
- All new pages need a navigation item. Without a navigation, the page becomes "orphaned." That
- is:
- - The navigation shuts when the page is opened, and the reader loses their place.
- - The page doesn't belong in a group with other pages.
- This means the decision to create a new page is a decision to create new navigation item and vice
- versa.
- ### Where to add
- Documentation pages can be said to belong in the following groups:
- - GitLab users. This is documentation for day-to-day use of GitLab for users with any level
- of permissions, from Reporter to Owner.
- - GitLab administrators. This tends to be documentation for self-managed instances that requires
- access to the underlying infrastructure hosting GitLab.
- - Other documentation. This includes documentation for customers outside their day-to-day use of
- GitLab and for contributors. Documentation that doesn't fit in the other groups belongs here.
- With these groups in mind, the following are general rules for where new items should be added.
- - User documentation for:
- - Group-level features belongs under **Groups**.
- - Project-level features belongs under **Projects**.
- - Features outside a group or project level (sometimes called "instance-level") can be placed at
- the top-level, but care must be taken not to overwhelm that top-level space. If possible, such
- features could be grouped in some way.
- - Outside the above, most other miscellaneous user documentation belongs under **User**.
- - Administration documentation belongs under **Administrator**.
- - Other documentation belongs at the top-level, but care must be taken to not create an enormously
- long top-level navigation, which defeats the purpose of it.
- Making all documentation and navigation items adhere to these principles is being progressively
- rolled out.
- ### What to add
- Having decided where to add a navigation element, the next step is deciding what to add. The
- mechanics of what is required is [documented below](#data-file) but, in principle:
- - Navigation item text (that which the reader sees) should:
- - Be as short as possible.
- - Be contextual. It's rare to need to repeat text from a parent item.
- - Avoid jargon or terms of art, unless ubiquitous. For example, **CI** is an acceptable
- substitution for **Continuous Integration**.
- - Navigation links must follow the rules documented in the [data file](#data-file).
- ## How it works
- The global nav has five levels:
- - Section
- - Category
- - Doc
- - Doc
- - Doc
- You can view this structure in [the navigation.yml file](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/content/_data/navigation.yaml).
- **Do not** [add items](#add-a-navigation-entry) to the global nav without
- the consent of one of the technical writers.
- ## Composition
- The global nav is built from two files:
- - [Data](#data-file)
- - [Layout](#layout-file-logic)
- The data file feeds the layout with the links to the docs. The layout organizes
- the data among the nav in containers properly [styled](#css-classes).
- ### Data file
- The data file describes the structure of the navigation for the applicable project.
- It is stored at <https://gitlab.com/gitlab-org/gitlab-docs/blob/main/content/_data/navigation.yaml>
- and comprises of three main components:
- - Sections
- - Categories
- - Docs
- #### Sections
- Each section represents the higher-level nav item. It's composed by
- title and URL:
- ```yaml
- sections:
- - section_title: Text
- section_url: 'link'
- ```
- The section can stand alone or contain categories within.
- #### Categories
- Each category within a section composes the second level of the nav.
- It includes the category title and link. It can stand alone in the nav or contain
- a third level of sub-items.
- Example of section with one stand-alone category:
- ```yaml
- - section_title: Section title
- section_url: 'section-link'
- section_categories:
- - category_title: Category title
- category_url: 'category-link'
- ```
- Example of section with two stand-alone categories:
- ```yaml
- - section_title: Section title
- section_url: 'section-link'
- section_categories:
- - category_title: Category 1 title
- category_url: 'category-1-link'
- - category_title: Category 2 title
- category_url: 'category-2-link'
- ```
- For clarity, **always** add a blank line between categories.
- #### Docs
- Each doc represents the third, fourth, and fifth level of nav links. They must be always
- added within a category.
- Example with three doc links, one at each level:
- ```yaml
- - category_title: Category title
- category_url: 'category-link'
- docs:
- - doc_title: Document title
- doc_url: 'doc-link'
- docs:
- - doc_title: Document title
- doc_url: 'doc-link'
- docs:
- - doc_title: Document title
- doc_url: 'doc-link'
- ```
- A category supports as many docs as necessary, but, for clarity, try to not
- overpopulate a category. Also, do not use more than three levels of docs, it
- is not supported.
- Example with multiple docs:
- ```yaml
- - category_title: Category title
- category_url: 'category-link'
- docs:
- - doc_title: Document 1 title
- doc_url: 'doc-1-link'
- - doc_title: Document 2 title
- doc_url: 'doc-2-link'
- ```
- If you need to add a document in an external URL, add the attribute `external_url`
- below the doc link:
- ```yaml
- - doc_title: Document 2 title
- doc_url: 'doc-2-link'
- external_url: true
- ```
- All nav links are clickable. If the higher-level link does not have a link
- of its own, it must link to its first sub-item link, mimicking the navigation in GitLab.
- This must be avoided so that we don't have duplicated links nor two `.active` links
- at the same time.
- Example:
- ```yaml
- - category_title: Operations
- category_url: 'ee/user/project/integrations/prometheus_library/'
- # until we have a link to operations, the first doc link is
- # repeated in the category link
- docs:
- - doc_title: Metrics
- doc_url: 'ee/user/project/integrations/prometheus_library/'
- ```
- #### Syntax
- For all components (sections, categories, and docs), **respect the indentation**
- and the following syntax rules.
- ##### Titles
- - Use sentence case, capitalizing feature names.
- - There's no need to wrap the titles, unless there's a special char in it. For example,
- in `GitLab CI/CD`, there's a `/` present, therefore, it must be wrapped in quotes.