Do you know how to write the little more complex code? You can try something like this:
struct ResultView: View {
		@State var websites : [Website]
		@Binding var text : String
		@State var groupedArray : [String: [Website]] = [:]
		var body: some View {
				List{
						ForEach(filteredKeys(byName: text), id: \.self){key in //<-
								Section(header: Text(key)) {
										ForEach(groupedArray[key]!.filter{
												text.isEmpty || $0.name.contains(text)
										}, id: \.self) {website in
												NavigationLink(
														destination: WebView(website: website, url: URL(string: website.url)),
														label: {
																Text(website.name)
																Spacer()
																if website.image != ""{
																		RemoteImage(url: website.image).frame(width: 25, height: 25, alignment: .center)
																		
																}else{
																		Loader()
																}
														})
										}
								}
						}
				}.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height, alignment: .center)
				.navigationBarTitle("Results")
				
				.colorScheme(.light)
				.onAppear {
						groupedArray = Dictionary(
								grouping: websites,
								by: {$0.name.first?.uppercased() ?? ""}
						).mapValues{$0.sorted()}
				}
		}
		
		private func filteredKeys(byName text: String) -> [String] {
				return groupedArray.filter {(key, value) in
						value.contains{
								text.isEmpty || $0.name.contains(text)
						}
				}.map {(key, _) in key}.sorted()
		}
		
}
(Sorry, not tested and may need some fixes. And some || are not shown as always, you need to find where to fill in.)