{"id":36597099,"url":"https://github.com/floragunncom/search-guard-docs","last_synced_at":"2026-01-12T08:30:37.040Z","repository":{"id":45749916,"uuid":"60336599","full_name":"floragunncom/search-guard-docs","owner":"floragunncom","description":"Official documentation for Search Guard, the Elasticsearch security suite (no PRs, go to gitlab)","archived":false,"fork":false,"pushed_at":"2025-12-22T15:20:41.000Z","size":10823,"stargazers_count":92,"open_issues_count":7,"forks_count":75,"subscribers_count":11,"default_branch":"release","last_synced_at":"2025-12-23T05:07:54.067Z","etag":null,"topics":["elasticsearch","elk","elk-stack","kibana","multitenancy","searchguard"],"latest_commit_sha":null,"homepage":"https://git.floragunn.com/search-guard/search-guard-docs","language":"SCSS","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/floragunncom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-06-03T09:37:43.000Z","updated_at":"2025-12-22T15:20:44.000Z","dependencies_parsed_at":"2023-02-19T05:31:39.533Z","dependency_job_id":"92395f4d-e7e0-4699-9eeb-dfab77ddf859","html_url":"https://github.com/floragunncom/search-guard-docs","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/floragunncom/search-guard-docs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floragunncom%2Fsearch-guard-docs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floragunncom%2Fsearch-guard-docs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floragunncom%2Fsearch-guard-docs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floragunncom%2Fsearch-guard-docs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/floragunncom","download_url":"https://codeload.github.com/floragunncom/search-guard-docs/tar.gz/refs/heads/release","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floragunncom%2Fsearch-guard-docs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337596,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elasticsearch","elk","elk-stack","kibana","multitenancy","searchguard"],"created_at":"2026-01-12T08:30:36.507Z","updated_at":"2026-01-12T08:30:37.026Z","avatar_url":"https://github.com/floragunncom.png","language":"SCSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Search Guard Documentation System\n\nWelcome to the Search Guard Documentation System.\n\nThe latest online version can be found here: [Search Guard Documentation](https://docs.search-guard.com/latest/)\n\n## Table of Contents\n\n- [Technologies](#technologies)\n- [Quick Start](#quick-start)\n- [Available Commands](#available-commands)\n- [Project Structure](#project-structure)\n- [Navigation System](#navigation-system)\n- [Adding Content](#adding-content)\n- [Adding Changelogs](#adding-changelogs)\n- [Conventions](#conventions)\n- [Jekyll Plugins](#jekyll-plugins)\n- [CI/CD Pipeline](#cicd-pipeline)\n- [Troubleshooting](#troubleshooting)\n\n## Technologies\n\nThe documentation is based on:\n\n* **[Ruby 3.0](https://www.ruby-lang.org/en/)** - Programming language\n* **[Jekyll 4.2.0](https://jekyllrb.com/)** - Static site generator\n* **[Kramdown](https://kramdown.gettalong.org/)** - Markdown parser with GitHub Flavored Markdown (GFM) support\n* **[Sass](https://sass-lang.com/)** - CSS preprocessor\n* **[Algolia](https://www.algolia.com/)** - Full-text search engine\n* **[HTMLProofer](https://github.com/gjtorikian/html-proofer)** - Link validation tool\n* **[VSDocs Documentation Templates](https://themeforest.net/item/vsdocs-online-documentation-template/11418861)** - Base template\n\n## Quick Start\n\n### Installation\n\n1. Clone the repository:\n```bash\ngit clone \u003crepository-url\u003e\ncd search-guard-docs\n```\n\n2. Install Ruby dependencies:\n```bash\nbundle install\n```\n\n3. Start the development server:\n```bash\nbundle exec jekyll serve --watch\n```\n\nThe site will be available at `http://localhost:4000`. The `--watch` flag tells Jekyll to automatically regenerate the site when files change.\n\n## Available Commands\n\n### Development\n\n**Start development server:**\n```bash\nbundle exec jekyll serve --watch\n```\n\n**Build the site (production):**\n```bash\nbundle exec jekyll build\n```\n\n**Build with version configuration:**\n```bash\nbundle exec jekyll build --config _config.yml,_versions.yml\n```\n\n### Testing\n\n**Check for broken links:**\n```bash\n# Build the site first\nbundle exec jekyll build\n\n# Run HTMLProofer\nbundle exec htmlproofer ./_site --assume-extension .html --disable-external \\\n  --url-ignore \"/^\\/(latest|[67]\\.x-\\d{2}|v[25])(\\/|$)/\" \\\n  --alt-ignore '/.*/' --allow_hash_href true\n```\n\n### Search Index\n\n**Rebuild Algolia search index:**\n```bash\nbundle exec jekyll algolia push --config _config.yml,_versions.yml\n```\n\n**Note:** To skip search indexing during deployment, include \"noindex\" in your commit message.\n\n### Helper Scripts\n\n**Add section fields to all pages (bulk update):**\n```bash\n./add_section_fields.sh\n```\n\n## Project Structure\n\n```\nsearch-guard-docs/\n├── _content/                   # All documentation markdown files\n│   ├── _changelogs/           # Changelog entries\n│   ├── _docs_introduction/    # Introduction documentation\n│   ├── _docs_installation/    # Installation guides\n│   ├── _docs_tls/            # TLS/encryption configuration\n│   ├── _docs_auth_auth/      # Authentication and authorization\n│   ├── _docs_roles_permissions/ # RBAC documentation\n│   ├── _docs_kibana/         # Kibana integration\n│   ├── _docs_signals/        # Alerting (Signals feature)\n│   ├── _docs_aim/            # Automated Index Management\n│   ├── _docs_dls_fls/        # Document and Field-Level Security\n│   ├── _docs_audit_logging/  # Audit logging\n│   ├── _docs_encryption_at_rest/ # Encryption at rest\n│   ├── _docs_ad/             # Anomaly Detection\n│   ├── _docs_category_pages/ # Auto-generated category pages\n│   └── ...                   # Other collections\n├── _data/                     # YAML/JSON data files\n│   ├── main_navigation_sections.yml  # Main nav section definitions\n│   ├── side_navigation_main_structure.yml # Side nav orchestrator\n│   ├── side_navigation_security.yml # Security section navigation\n│   ├── side_navigation_alerting.yml # Alerting section navigation\n│   ├── side_navigation_index_management.yml\n│   ├── side_navigation_encryption_at_rest.yml\n│   ├── side_navigation_anomaly_detection.yml\n│   ├── sgversions_docroots.yml # Version dropdown data\n│   └── breadcrumbs.yml        # Auto-generated (git-ignored)\n├── _diagrams/                 # Diagrams (PNG + draw.io sources)\n├── _includes/                 # Reusable template fragments\n│   ├── main_navigation.html   # Top navigation bar\n│   ├── left_navigation.html   # Side navigation\n│   ├── left_navigation_item.html # Recursive nav item renderer\n│   ├── breadcrumbs.html       # Breadcrumb navigation\n│   └── ...                    # Other includes\n├── _layouts/                  # Page layout templates\n│   ├── docs.html             # Main documentation layout\n│   ├── search.html           # Search results layout\n│   └── versionmatrix.html    # Version compatibility layout\n├── _plugins/                  # Custom Jekyll plugins\n│   ├── category_pages_generator.rb # Auto-generate category pages\n│   ├── breadcrumbs_generator.rb    # Generate breadcrumb data\n│   ├── search.rb                   # Algolia search integration\n│   ├── custom_kramdown.rb          # Custom code block rendering\n│   └── file_normalizer.rb          # File name normalization\n├── sass/                      # Sass/SCSS source files\n│   ├── _sg_navigation.scss   # Navigation styles\n│   ├── _sg_code.scss         # Code block styles\n│   └── ...                   # 60+ other style modules\n├── css/                       # Compiled CSS output\n├── js/                        # JavaScript files\n├── fonts/                     # Font files\n├── img/                       # Images and graphics\n├── _site/                     # Generated static site (git-ignored)\n├── _config.yml               # Main Jekyll configuration\n├── _versions.yml             # Version-specific configuration\n├── Gemfile                   # Ruby dependencies\n└── index.md                  # Homepage\n```\n\n### Key Directories\n\n**`_content/`** - All documentation markdown files organized by Jekyll collections. Each subdirectory represents a logical grouping of related documentation.\n\n**`_data/`** - YAML files containing structured data, primarily navigation structures and metadata.\n\n**`_includes/`** - Reusable template components that can be included in layouts and pages.\n\n**`_layouts/`** - Page templates that wrap content with HTML structure.\n\n**`_plugins/`** - Custom Ruby plugins that extend Jekyll's functionality.\n\n**`sass/`** - Sass source files that compile to CSS.\n\n**`_site/`** - Generated static HTML (not tracked in git).\n\n## Navigation System\n\nThe documentation uses a **section-based navigation system** with two levels:\n\n### Main Navigation (Top Bar)\n\nDisplays 5 clickable section tabs plus Versions and Contact:\n\n**Security | Alerting | Index Management | Encryption at Rest | Anomaly Detection | Versions | Contact**\n\nConfiguration: `_data/main_navigation_sections.yml`\n\n```yaml\nsections:\n  - title: Security\n    slug: security              # Landing page permalink\n    key: security               # Used in page frontmatter\n    nav_file: side_navigation_security  # Side nav file to load\n\n  - title: Alerting\n    slug: elasticsearch-alerting\n    key: alerting\n    nav_file: side_navigation_alerting\n\n  # ... additional sections\n```\n\n### Side Navigation (Left Sidebar)\n\nShows a hierarchical tree of pages within the active section. The displayed navigation is determined by the page's `section` field.\n\n**Behavior:**\n- **Pages with `section` field**: Shows only that section's navigation tree\n- **Homepage (`isroot: true`)**: Shows a flat list of the 5 main sections\n- **Pages without section**: Fallback to showing all sections\n\n**Configuration:** Each section has its own navigation YAML file in `_data/`:\n- `side_navigation_security.yml`\n- `side_navigation_alerting.yml`\n- `side_navigation_index_management.yml`\n- `side_navigation_encryption_at_rest.yml`\n- `side_navigation_anomaly_detection.yml`\n\n**Navigation Structure:**\n```yaml\n- title: Security\n  slug: security\n  children:\n    - title: Introduction to Search Guard\n      slug: search-guard-introduction\n      children:\n        - title: Overview\n          slug: security-for-elasticsearch\n        - title: Main Concepts\n          slug: main-concepts\n    - title: TLS Setup\n      slug: search-guard-security-tls-setup\n      children:\n        - title: Configuring TLS\n          slug: configuring-tls\n```\n\n**Important:** The `slug` in navigation files MUST match the `permalink` in page frontmatter exactly (1:1 match).\n\n### Breadcrumbs\n\nBreadcrumbs are auto-generated from the navigation structure by the `breadcrumbs_generator.rb` plugin. The plugin inverts the navigation tree to create a lookup table mapping each page to its ancestor path.\n\n## Adding Content\n\n### Adding a New Page to an Existing Section\n\n1. **Create a markdown file** in the appropriate collection directory:\n   - Security pages → `_content/_docs_*` (auth_auth, tls, roles_permissions, etc.)\n   - Alerting pages → `_content/_docs_signals/`\n   - Index Management → `_content/_docs_aim/`\n   - Encryption at Rest → `_content/_docs_encryption_at_rest/`\n   - Anomaly Detection → `_content/_docs_ad/`\n\n2. **Add frontmatter** to the markdown file:\n\n```yaml\n---\ntitle: Configuring TLS\nhtml_title: TLS Configuration Guide  # Optional\npermalink: configuring-tls            # Required, lowercase with dashes\nlayout: docs                          # Required\nsection: security                     # Required (security, alerting, index_management, encryption_at_rest, anomaly_detection)\ndescription: How to configure TLS for Search Guard  # Optional but recommended\nedition: enterprise                   # Optional (community or enterprise)\n---\n```\n\n3. **Add the page to navigation** in the appropriate `_data/side_navigation_*.yml` file:\n\n```yaml\n- title: TLS Setup\n  slug: search-guard-security-tls-setup\n  children:\n    - title: Configuring TLS\n      slug: configuring-tls    # Must match permalink exactly!\n```\n\n4. **Write your content** using Markdown with GitHub Flavored Markdown (GFM) syntax.\n\n### Adding a New Main Section\n\nTo add a new main section (e.g., \"Machine Learning\"):\n\n1. **Create a collection directory:**\n```bash\nmkdir _content/_docs_ml\n```\n\n2. **Declare the collection** in `_config.yml`:\n\n```yaml\ncollections:\n  docs_ml:\n    output: true\n    permalink: :name\n    algolia_hierarchy: \"Machine Learning\"\n```\n\n3. **Add section to main navigation** in `_data/main_navigation_sections.yml`:\n\n```yaml\nsections:\n  # ... existing sections ...\n\n  - title: Machine Learning\n    slug: machine-learning\n    key: machine_learning\n    nav_file: side_navigation_machine_learning\n```\n\n4. **Create side navigation file** `_data/side_navigation_machine_learning.yml`:\n\n```yaml\n- title: Machine Learning\n  slug: machine-learning\n  children:\n    - title: Getting Started\n      slug: ml-getting-started\n    - title: Configuration\n      slug: ml-configuration\n```\n\n5. **Add to side navigation orchestrator** in `_data/side_navigation_main_structure.yml`:\n\n```yaml\nfiles:\n  - side_navigation_security\n  - side_navigation_alerting\n  - side_navigation_index_management\n  - side_navigation_encryption_at_rest\n  - side_navigation_anomaly_detection\n  - side_navigation_machine_learning  # Add here\n```\n\n6. **Create the landing page** at `_content/_docs_category_pages/machine_learning.md`:\n\n```yaml\n---\ntitle: Machine Learning\nhtml_title: Machine Learning\npermalink: machine-learning\nlayout: docs\nsection: machine_learning\nindex: false\ndescription: All pages in the category Machine Learning\n---\n# Machine Learning\n\nBrowse all documentation pages in the Machine Learning category:\n\n* [Getting Started](ml-getting-started)\n* [Configuration](ml-configuration)\n```\n\n7. **Create your documentation pages** in `_content/_docs_ml/` with `section: machine_learning` in their frontmatter.\n\n## Adding Changelogs\n\nChangelogs are integrated into the Security section's navigation.\n\n### Adding a New Changelog Entry\n\n1. **Create a markdown file** in `_content/_changelogs/`:\n\n```bash\n_content/_changelogs/changelog_searchguard_flx_4_0_0.md\n```\n\n2. **Add frontmatter:**\n\n```yaml\n---\ntitle: Search Guard FLX 4.0.0\npermalink: changelog-searchguard-flx-4_0_0\nlayout: docs\nsection: security\ndescription: Changelog for Search Guard FLX 4.0.0\nindex: false\nsitemap: false\n---\n```\n\n3. **Write changelog content** using markdown.\n\n4. **Add to changelog navigation** in the appropriate changelog main page (e.g., `_content/_changelogs/changelogs_searchguard_main.md`).\n\n### Changelog Organization\n\nChangelogs are accessible via:\n- **Main Navigation:** Security → Changelogs (in side nav)\n- **Side Navigation Structure:** Defined in `_data/side_navigation_security.yml`:\n\n```yaml\n- title: Changelogs\n  slug: changelogs-section\n  children:\n    - title: Search Guard Security\n      slug: changelogs-searchguard\n    - title: Kibana\n      slug: changelogs-kibana\n    - title: TLS Tool\n      slug: changelogs-tlstool\n    - title: Encryption at Rest\n      slug: changelogs-ear\n```\n\n## Conventions\n\n### Permalinks and Filenames\n\n**Permalinks:**\n- Lowercase only\n- Use dashes (`-`) as word delimiters\n- Example: `configuring-tls`\n- **NEVER change a permalink without coordinating a 301 redirect!**\n\n**Filenames:**\n- Lowercase only\n- Use underscores (`_`) as word delimiters\n- Example: `configuring_tls.md`\n\n**SEO Importance:** Permalinks are critical for SEO. Do not change them unless absolutely necessary and only after coordinating with DevOps for 301 redirect setup.\n\n### Section Field Values\n\nUse these exact values for the `section` field in frontmatter:\n\n- `security` - Security documentation\n- `alerting` - Alerting/Signals documentation\n- `index_management` - Index Management documentation\n- `encryption_at_rest` - Encryption at Rest documentation\n- `anomaly_detection` - Anomaly Detection documentation\n\n### Navigation Slugs\n\n**Critical Rule:** The `slug` value in navigation YAML files MUST match the `permalink` in the page's frontmatter exactly (1:1 match).\n\nNavigation file:\n```yaml\n- title: Configuring TLS\n  slug: configuring-tls\n```\n\nPage frontmatter:\n```yaml\npermalink: configuring-tls\n```\n\n### Internal Linking\n\nAlways use the permalink/slug, NOT the file path:\n\n**✅ Correct:**\n```markdown\n[Search Guard FLX 3.0.0](changelog-searchguard-flx-3_0_0)\n```\n\n**❌ Incorrect:**\n```markdown\n[Search Guard FLX 3.0.0](../_changelogs/changelog_searchguard_flx_3_0_0.md)\n```\n\n### Frontmatter Fields\n\n**Required:**\n- `title` - Page title\n- `permalink` - URL slug\n- `layout` - Usually `docs`\n- `section` - Section identifier\n\n**Optional but Recommended:**\n- `html_title` - SEO-optimized title\n- `description` - Meta description for search engines\n- `edition` - `community` or `enterprise`\n- `resources` - Array of external resource links\n- `index_algolia` - Set to `false` to exclude from search (default: `true`)\n\n## Jekyll Plugins\n\n### 1. Category Pages Generator\n\n**Location:** `_plugins/category_pages_generator.rb`\n\n**Purpose:** Automatically generates landing pages for navigation items that have children but no corresponding content file.\n\n**How it works:**\n1. Reads all navigation YAML files\n2. For each nav item with children, checks if a content file exists with that permalink\n3. If no file exists, generates a category page listing all children\n4. **NEW:** Automatically adds the correct `section` field to generated pages based on which navigation file they belong to\n\n**Generated pages are placed in:** `_content/_docs_category_pages/`\n\n**Example:** If your navigation has:\n```yaml\n- title: Introduction to Search Guard\n  slug: search-guard-introduction\n  children:\n    - title: Overview\n      slug: security-for-elasticsearch\n```\n\nAnd no file exists with `permalink: search-guard-introduction`, the plugin auto-generates one.\n\n### 2. Breadcrumbs Generator\n\n**Location:** `_plugins/breadcrumbs_generator.rb`\n\n**Purpose:** Generates an inverted lookup table of the navigation structure for efficient breadcrumb rendering.\n\n**How it works:**\n1. Reads `side_navigation_main_structure.yml`\n2. Recursively processes each navigation tree\n3. Creates a hash mapping each slug to its full ancestor path\n4. Writes to `_data/breadcrumbs.yml` (git-ignored)\n\n**Example output:**\n```yaml\nsecurity:\n  - title: Security\n    slug: security\nsearch-guard-introduction:\n  - title: Security\n    slug: security\n  - title: Introduction to Search Guard\n    slug: search-guard-introduction\n```\n\n### 3. Algolia Search Integration\n\n**Location:** `_plugins/search.rb`\n\n**Purpose:** Custom hook to chunk documentation content for better search granularity.\n\n**How it works:**\n1. Breaks down each page into chunks by headings (h1-h5)\n2. Each chunk becomes a separate searchable record in Algolia\n3. Records include hierarchical categorization via `algolia_hierarchy`\n4. 20KB size limit per chunk\n\n**Note:** The `algoliasearch-jekyll` gem is deprecated but still functional.\n\n### 4. Custom Kramdown Renderer\n\n**Location:** `_plugins/custom_kramdown.rb`\n\n**Purpose:** Renders fenced code blocks with special HTML structure for copy-to-clipboard functionality.\n\n**Features:**\n- Adds wrapper elements around code blocks\n- Enables \"Copy Code\" button functionality\n- Preserves syntax highlighting\n\n### 5. File Normalizer\n\n**Location:** `_plugins/file_normalizer.rb`\n\n**Purpose:** Normalizes file names to ensure consistency.\n\n## CI/CD Pipeline\n\n**Location:** `.gitlab-ci.yml`\n\n### Build Stage\n\n1. **Merge conflict detection:** Checks for merge markers\n2. **Clean build:** Removes old `_site` directory\n3. **2-pass Jekyll build:**\n   - First pass generates basic pages\n   - Second pass includes auto-generated category pages\n4. **Link validation:** Runs HTMLProofer to check for broken internal links\n\n### Deploy Stage\n\n**Triggers:** Only on `release` branch\n\n1. **SFTP Upload:** Deploys `_site` to production server\n2. **Cloudflare Cache Purge:** Clears CDN cache\n3. **Algolia Index Rebuild:** Updates search index (unless commit message contains \"noindex\")\n\n### Environment Variables\n\n- `sftp_server` - SFTP server address\n- `sftp_user_name` - SFTP username\n- `sftp_user_private_key_base64` - SSH private key (base64 encoded)\n- `SG_CLOUDFLARE_ZONEID` - Cloudflare zone ID\n- `SG_CLOUDFLARE_DECACHE_TOKEN` - Cloudflare API token\n- `ALGOLIA_APPLICATION_ID` - Algolia application ID\n- `ALGOLIA_API_KEY` - Algolia admin API key\n\n## Troubleshooting\n\n### Ruby Version Issues\n\nJekyll 4.2.0 is compatible with Ruby 3.0-3.2. If you have Ruby 3.3+, you may encounter errors.\n\n**Solution:**\n```bash\n# Use rbenv or rvm to switch Ruby version\nrvm use 3.0.0\n# or\nrbenv local 3.0.0\n\n# Reinstall dependencies\nbundle install\n```\n\n### Build Errors\n\n**Common issues:**\n\n1. **Missing gems:** Run `bundle install`\n2. **Sass compilation errors:** Check syntax in `sass/*.scss` files\n3. **Plugin errors:** Check Ruby syntax in `_plugins/*.rb` files\n4. **YAML parsing errors:** Validate YAML files in `_data/` directory\n\n### Navigation Not Displaying\n\n**Checklist:**\n1. Verify `section` field in page frontmatter matches a key in `main_navigation_sections.yml`\n2. Check that navigation YAML file is listed in `side_navigation_main_structure.yml`\n3. Ensure `slug` in navigation matches `permalink` in page frontmatter exactly\n4. Rebuild the site to regenerate breadcrumbs\n\n### Search Not Working\n\n1. Rebuild Algolia index: `bundle exec jekyll algolia push`\n2. Check that `index_algolia: false` is not set in frontmatter\n3. Verify Algolia credentials in `_config.yml`\n\n### Broken Links\n\nRun HTMLProofer:\n```bash\nbundle exec jekyll build\nbundle exec htmlproofer ./_site --assume-extension .html --disable-external \\\n  --url-ignore \"/^\\/(latest|[67]\\.x-\\d{2}|v[25])(\\/|$)/\" \\\n  --alt-ignore '/.*/' --allow_hash_href true\n```\n\n### CSS Changes Not Appearing\n\n1. **Rebuild the site:** Sass files need recompilation\n2. **Hard refresh browser:** Ctrl+F5 or Cmd+Shift+R\n3. **Check file location:** Ensure changes are in `sass/` not `css/`\n4. **Verify import:** Check that SCSS file is imported in main stylesheet\n\n## Additional Resources\n\n- [Jekyll Documentation](https://jekyllrb.com/docs/)\n- [Kramdown Syntax](https://kramdown.gettalong.org/syntax.html)\n- [Sass Documentation](https://sass-lang.com/documentation)\n- [Algolia Jekyll Plugin](https://community.algolia.com/jekyll-algolia/)\n- [HTMLProofer](https://github.com/gjtorikian/html-proofer)\n\n## Support\n\nFor issues or questions:\n- Internal documentation team\n- [Search Guard Forum](https://forum.search-guard.com)\n- [Search Guard Contact](https://search-guard.com/contacts/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffloragunncom%2Fsearch-guard-docs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffloragunncom%2Fsearch-guard-docs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffloragunncom%2Fsearch-guard-docs/lists"}