diff --git a/ee/app/assets/javascripts/geo_sites/components/header/geo_site_actions_mobile.vue b/ee/app/assets/javascripts/geo_sites/components/header/geo_site_actions_mobile.vue
index 77fb20f86bd1b165e0608a600b121483cbdd2f94..29842cc0a4ede65087a67e8447cde3ba087014ff 100644
--- a/ee/app/assets/javascripts/geo_sites/components/header/geo_site_actions_mobile.vue
+++ b/ee/app/assets/javascripts/geo_sites/components/header/geo_site_actions_mobile.vue
@@ -1,5 +1,5 @@
 <script>
-import { GlDropdown, GlDropdownItem, GlIcon } from '@gitlab/ui';
+import { GlDisclosureDropdown } from '@gitlab/ui';
 // eslint-disable-next-line no-restricted-imports
 import { mapGetters } from 'vuex';
 import { __ } from '~/locale';
@@ -7,13 +7,12 @@ import { __ } from '~/locale';
 export default {
   name: 'GeoSiteActionsMobile',
   i18n: {
+    toggleText: __('Actions'),
     editButtonLabel: __('Edit'),
     removeButtonLabel: __('Remove'),
   },
   components: {
-    GlDropdown,
-    GlDropdownItem,
-    GlIcon,
+    GlDisclosureDropdown,
   },
   props: {
     site: {
@@ -23,25 +22,39 @@ export default {
   },
   computed: {
     ...mapGetters(['canRemoveSite']),
+    dropdownItems() {
+      return [
+        {
+          text: this.$options.i18n.editButtonLabel,
+          href: this.site.webEditUrl,
+        },
+        {
+          text: this.$options.i18n.removeButtonLabel,
+          action: () => {
+            this.$emit('remove');
+          },
+          extraAttrs: {
+            'data-testid': 'geo-mobile-remove-action',
+            class: this.dropdownRemoveClass,
+            disabled: !this.canRemoveSite(this.site.id),
+          },
+        },
+      ];
+    },
     dropdownRemoveClass() {
-      return this.canRemoveSite(this.site.id) ? 'gl-text-red-500' : 'gl-text-gray-400';
+      return this.canRemoveSite(this.site.id) ? 'gl-text-red-500!' : 'gl-text-gray-400!';
     },
   },
 };
 </script>
 
 <template>
-  <gl-dropdown toggle-class="gl-shadow-none! gl-bg-transparent! gl-p-3!" right>
-    <template #button-content>
-      <gl-icon name="ellipsis_h" />
-    </template>
-    <gl-dropdown-item :href="site.webEditUrl">{{ $options.i18n.editButtonLabel }}</gl-dropdown-item>
-    <gl-dropdown-item
-      :disabled="!canRemoveSite(site.id)"
-      data-testid="geo-mobile-remove-action"
-      @click="$emit('remove')"
-    >
-      <span :class="dropdownRemoveClass">{{ $options.i18n.removeButtonLabel }}</span>
-    </gl-dropdown-item>
-  </gl-dropdown>
+  <gl-disclosure-dropdown
+    icon="ellipsis_v"
+    :toggle-text="$options.i18n.toggleText"
+    text-sr-only
+    category="tertiary"
+    no-caret
+    :items="dropdownItems"
+  />
 </template>
diff --git a/ee/spec/frontend/geo_sites/components/header/geo_site_actions_mobile_spec.js b/ee/spec/frontend/geo_sites/components/header/geo_site_actions_mobile_spec.js
index 467e5a91ddc35ff5afb858f367ada95286ad39af..92291bf7bbc0456b495b8115a11536e12bdf9f50 100644
--- a/ee/spec/frontend/geo_sites/components/header/geo_site_actions_mobile_spec.js
+++ b/ee/spec/frontend/geo_sites/components/header/geo_site_actions_mobile_spec.js
@@ -1,8 +1,8 @@
-import { GlDropdown, GlDropdownItem } from '@gitlab/ui';
+import { GlDisclosureDropdown } from '@gitlab/ui';
 import Vue from 'vue';
 // eslint-disable-next-line no-restricted-imports
 import Vuex from 'vuex';
-import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import { shallowMountExtended, mountExtended } from 'helpers/vue_test_utils_helper';
 import GeoSiteActionsMobile from 'ee/geo_sites/components/header/geo_site_actions_mobile.vue';
 import { MOCK_PRIMARY_SITE } from 'ee_jest/geo_sites/mock_data';
 
@@ -15,7 +15,7 @@ describe('GeoSiteActionsMobile', () => {
     site: MOCK_PRIMARY_SITE,
   };
 
-  const createComponent = (props, getters) => {
+  const createComponent = (props, getters, mountFn = shallowMountExtended) => {
     const store = new Vuex.Store({
       getters: {
         canRemoveSite: () => () => true,
@@ -23,7 +23,7 @@ describe('GeoSiteActionsMobile', () => {
       },
     });
 
-    wrapper = shallowMountExtended(GeoSiteActionsMobile, {
+    wrapper = mountFn(GeoSiteActionsMobile, {
       store,
       propsData: {
         ...defaultProps,
@@ -32,11 +32,11 @@ describe('GeoSiteActionsMobile', () => {
     });
   };
 
-  const findGeoMobileActionsDropdown = () => wrapper.findComponent(GlDropdown);
-  const findGeoMobileActionsDropdownItems = () => wrapper.findAllComponents(GlDropdownItem);
+  const findGeoMobileActionsDisclosureDropdown = () => wrapper.findComponent(GlDisclosureDropdown);
+  const findGeoMobileActionsDisclosureDropdownItems = () =>
+    findGeoMobileActionsDisclosureDropdown().props('items');
   const findGeoMobileActionsRemoveDropdownItem = () =>
     wrapper.findByTestId('geo-mobile-remove-action');
-  const findGeoMobileActionsRemoveDropdownItemText = () => wrapper.findByText('Remove');
 
   describe('template', () => {
     describe('always', () => {
@@ -45,36 +45,41 @@ describe('GeoSiteActionsMobile', () => {
       });
 
       it('renders Dropdown', () => {
-        expect(findGeoMobileActionsDropdown().exists()).toBe(true);
+        expect(findGeoMobileActionsDisclosureDropdown().exists()).toBe(true);
       });
 
       it('renders an Edit and Remove dropdown item', () => {
-        expect(findGeoMobileActionsDropdownItems().wrappers.map((w) => w.text())).toStrictEqual([
-          'Edit',
-          'Remove',
-        ]);
+        expect(
+          findGeoMobileActionsDisclosureDropdownItems().map((item) => item.text),
+        ).toStrictEqual(['Edit', 'Remove']);
       });
 
       it('renders edit link correctly', () => {
-        expect(findGeoMobileActionsDropdownItems().at(0).attributes('href')).toBe(
+        expect(findGeoMobileActionsDisclosureDropdownItems()[0].href).toBe(
           MOCK_PRIMARY_SITE.webEditUrl,
         );
       });
+    });
+
+    describe('actions', () => {
+      beforeEach(() => {
+        createComponent(null, null, mountExtended);
+      });
 
       it('emits remove when remove button is clicked', () => {
-        findGeoMobileActionsRemoveDropdownItem().vm.$emit('click');
+        findGeoMobileActionsRemoveDropdownItem().trigger('click');
 
         expect(wrapper.emitted('remove')).toHaveLength(1);
       });
     });
 
     describe.each`
-      canRemoveSite | disabled     | dropdownClass
-      ${false}      | ${'true'}    | ${'gl-text-gray-400'}
-      ${true}       | ${undefined} | ${'gl-text-red-500'}
+      canRemoveSite | disabled      | dropdownClass
+      ${false}      | ${'disabled'} | ${'gl-text-gray-400!'}
+      ${true}       | ${undefined}  | ${'gl-text-red-500!'}
     `(`conditionally`, ({ canRemoveSite, disabled, dropdownClass }) => {
       beforeEach(() => {
-        createComponent({}, { canRemoveSite: () => () => canRemoveSite });
+        createComponent({}, { canRemoveSite: () => () => canRemoveSite }, mountExtended);
       });
 
       describe(`when canRemoveSite is ${canRemoveSite}`, () => {
@@ -82,7 +87,7 @@ describe('GeoSiteActionsMobile', () => {
           canRemoveSite ? 'not ' : ''
         }disable the Mobile Remove dropdown item and adds proper class`, () => {
           expect(findGeoMobileActionsRemoveDropdownItem().attributes('disabled')).toBe(disabled);
-          expect(findGeoMobileActionsRemoveDropdownItemText().classes(dropdownClass)).toBe(true);
+          expect(findGeoMobileActionsRemoveDropdownItem().classes(dropdownClass)).toBe(true);
         });
       });
     });